From d71c30eef76abe5972d84552abe89510ba345c50 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Wed, 2 Nov 2022 19:14:48 -0400 Subject: [PATCH 01/83] Include pims-ui to docker-compose --- docker-compose-dev.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 50968f46..9a5a2def 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -126,6 +126,18 @@ services: - rems_dev_pharmacy-information-system-backend-nodeModules:/home/node/app/pharmacy-information-system/backend/node_modules - rems_dev_pharmacy-information-system-logs:/home/node/app/pharmacy-information-system/logs + ### + # 11/02/2022 - Pharmacy-information-system as it stands (defined above) will be phased out and replaced with 'pims'. + # The new UI for pims is name pims-ui and is defined directly below. The backend will come a bit later. + ### + pims-ui: + build: + context: ../pims + dockerfile: Dockerfile.dev + container_name: rems_dev_pims_ui + ports: + - "3009:3009" + pharmacy-information-system-database: # Name of our service image: mongo container_name: rems_dev_pharmacy-information-system-database From 6f66ae76f3bd3f0f900141881f5d52348f41ae29 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Wed, 2 Nov 2022 19:15:21 -0400 Subject: [PATCH 02/83] Update workspace to include pims. --- docker-sync.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-sync.yml b/docker-sync.yml index dafb5893..d599f76b 100644 --- a/docker-sync.yml +++ b/docker-sync.yml @@ -22,5 +22,5 @@ syncs: src: '.' rems_dev_pharmacy-information-system-sync: - src: '../pharmacy-information-system' + src: '../pims' sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] \ No newline at end of file From abe25ffd34b6e873f085a68ff37158f02d9e5aad Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Mon, 7 Nov 2022 15:02:08 -0500 Subject: [PATCH 03/83] Resolve GitHub reviews. --- docker-compose-dev.yml | 84 +++++++++++++++++++++--------------------- docker-sync.yml | 4 ++ 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 9a5a2def..79df8992 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -107,49 +107,50 @@ services: volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important - pharmacy-information-system: # Name of our service - build: - context: ../pharmacy-information-system - dockerfile: Dockerfile.dev - container_name: rems_dev_pharmacy-information-system - environment: - - PORT=3010 - - MONGODB_CONNSTRING=mongodb://pharmacy-information-root:pharmacy-information-password@pharmacy-information-system-database:27017?retryWrites=true&w=majority - - CRD_BASE_URL=http://crd:8090/ - ports: # Port binding to host from docker container - - "4200:4200" - - "3010:3010" - - "3011:3011" - volumes: - - rems_dev_pharmacy-information-system-sync:/home/node/app/pharmacy-information-system:nocopy # nocopy is important - - rems_dev_pharmacy-information-system-nodeModules:/home/node/app/pharmacy-information-system/node_modules - - rems_dev_pharmacy-information-system-backend-nodeModules:/home/node/app/pharmacy-information-system/backend/node_modules - - rems_dev_pharmacy-information-system-logs:/home/node/app/pharmacy-information-system/logs + # pharmacy-information-system: # Name of our service + # build: + # context: ../pharmacy-information-system + # dockerfile: Dockerfile.dev + # container_name: rems_dev_pharmacy-information-system + # environment: + # - PORT=3010 + # - MONGODB_CONNSTRING=mongodb://pharmacy-information-root:pharmacy-information-password@pharmacy-information-system-database:27017?retryWrites=true&w=majority + # - CRD_BASE_URL=http://crd:8090/ + # ports: # Port binding to host from docker container + # - "4200:4200" + # - "3010:3010" + # - "3011:3011" + # volumes: + # - rems_dev_pharmacy-information-system-sync:/home/node/app/pharmacy-information-system:nocopy # nocopy is important + # - rems_dev_pharmacy-information-system-nodeModules:/home/node/app/pharmacy-information-system/node_modules + # - rems_dev_pharmacy-information-system-backend-nodeModules:/home/node/app/pharmacy-information-system/backend/node_modules + # - rems_dev_pharmacy-information-system-logs:/home/node/app/pharmacy-information-system/logs - ### - # 11/02/2022 - Pharmacy-information-system as it stands (defined above) will be phased out and replaced with 'pims'. - # The new UI for pims is name pims-ui and is defined directly below. The backend will come a bit later. - ### - pims-ui: + pims: build: context: ../pims dockerfile: Dockerfile.dev - container_name: rems_dev_pims_ui + container_name: rems_dev_pims ports: - "3009:3009" - - pharmacy-information-system-database: # Name of our service - image: mongo - container_name: rems_dev_pharmacy-information-system-database - environment: - MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password - expose: - - "27017" - ports: # Port binding to host from docker container - - "27017:27017" volumes: - - rems_dev_pharmacy-infomation-system-database:/data/db + - rems_dev_pims-sync:/home/node/app/pims:nocopy + - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules + # - rems_dev_pims-backend-nodeModules:/home/node/app/pims/backend/node_modules + - rems_dev_pims-logs:/home/node/app/pims/logs + + # pharmacy-information-system-database: # Name of our service + # image: mongo + # container_name: rems_dev_pharmacy-information-system-database + # environment: + # MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root + # MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password + # expose: + # - "27017" + # ports: # Port binding to host from docker container + # - "27017:27017" + # volumes: + # - rems_dev_pharmacy-infomation-system-database:/data/db volumes: rems_dev_test-ehr-sync: @@ -162,8 +163,9 @@ volumes: external: true rems_dev_rems-sync: external: true - rems_dev_pharmacy-information-system-sync: + rems_dev_pims-sync: external: true + rems_dev_keycloak-data: rems_dev_test-ehr-gradle: rems_dev_test-ehr-bin: @@ -185,7 +187,7 @@ volumes: rems_dev_dtr-nodeModules: rems_dev_dtr-databaseData: rems_dev_dtr-logs: - rems_dev_pharmacy-information-system-nodeModules: - rems_dev_pharmacy-information-system-backend-nodeModules: - rems_dev_pharmacy-information-system-logs: - rems_dev_pharmacy-infomation-system-database: + rems_dev_pims-nodeModules: + # rems_dev_pims-backend-nodeModules: + rems_dev_pims-logs: + # rems_dev_pims-database: diff --git a/docker-sync.yml b/docker-sync.yml index d599f76b..151bc52f 100644 --- a/docker-sync.yml +++ b/docker-sync.yml @@ -22,5 +22,9 @@ syncs: src: '.' rems_dev_pharmacy-information-system-sync: + src: '../pharmacy-information-system' + sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] + + rems_dev_pims-sync: src: '../pims' sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] \ No newline at end of file From a4db2190d76e2c87f7695b4c5f60740f10033c1a Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Tue, 8 Nov 2022 14:41:03 -0500 Subject: [PATCH 04/83] Port remap. --- docker-compose-dev.yml | 70 ++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 79df8992..b3fb8601 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -12,21 +12,23 @@ services: volumes: - rems_dev_keycloak-data:/opt/jboss/keycloak/standalone/data/ - '../test-ehr/src/main/resources/ClientFhirServerRealm.json:/resources/ClientFhirServerRealm.json' - build: + build: context: ../test-ehr - dockerfile: Dockerfile.keycloak + dockerfile: Dockerfile.keycloak # Create test ehr container - test-ehr: # Name of our service + test-ehr: + # Name of our service container_name: rems_dev_test-ehr - ports: # Port binding to host from docker container + ports: + # Port binding to host from docker container - '8080:8080' # Bind port 3000 of host to 3000 of container - "8081:8081" environment: - DOCKER_PROFILE=true - build: + build: context: ../test-ehr - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.dev volumes: - rems_dev_test-ehr-sync:/test-ehr:nocopy # nocopy is important - rems_dev_test-ehr-gradle:/test-ehr/.gradle @@ -37,14 +39,15 @@ services: extra_hosts: - "host.docker.internal:host-gateway" - # Create crd container - crd: # Name of our service - build: + crd: + # Name of our service + build: context: ../CRD - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.dev container_name: rems_dev_crd - ports: # Port binding to host from docker container + ports: + # Port binding to host from docker container - "8090:8090" # Bind port 3000 of host to 3000 of container - "8091:8091" environment: @@ -60,16 +63,17 @@ services: - rems_dev_crd-operations-build:/CRD/operations/build - rems_dev_crd-resources-build:/CRD/resources/build - # Create crd request generator container - crd-request-generator: # Name of our service - build: + crd-request-generator: + # Name of our service + build: context: ../crd-request-generator - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.dev container_name: rems_dev_crd-request-generator environment: - REACT_APP_REMS_CONFIG=true - ports: # Port binding to host from docker container + ports: + # Port binding to host from docker container - "3000:3000" # Bind port 3000 of host to 3000 of container - "3001:3001" volumes: @@ -79,14 +83,15 @@ services: - rems_dev_crd-request-generator-build:/home/node/app/crd-request-generator/build - rems_dev_crd-request-generator-logs:/home/node/app/crd-request-generator/logs - # Create dtr container - dtr: # Name of our service - build: + dtr: + # Name of our service + build: context: ../dtr - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.dev container_name: rems_dev_dtr - ports: # Port binding to host from docker container + ports: + # Port binding to host from docker container - "3005:3005" # Bind port 3000 of host to 3000 of container - "3006:3006" volumes: @@ -95,14 +100,15 @@ services: - rems_dev_dtr-databaseData:/home/node/app/dtr/databaseData - rems_dev_dtr-logs:/home/node/app/dtr/logs - # Create rems container - rems-administrator: # Name of our service - build: + rems-administrator: + # Name of our service + build: context: '.' - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.dev container_name: rems_dev_rems - ports: # Port binding to host from docker container + ports: + # Port binding to host from docker container - "9020:9020" # Bind port 3000 of host to 3000 of container volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important @@ -132,13 +138,12 @@ services: dockerfile: Dockerfile.dev container_name: rems_dev_pims ports: - - "3009:3009" + - "4200:3000" #4200 was the frontend port for the old pims volumes: - rems_dev_pims-sync:/home/node/app/pims:nocopy - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules # - rems_dev_pims-backend-nodeModules:/home/node/app/pims/backend/node_modules - rems_dev_pims-logs:/home/node/app/pims/logs - # pharmacy-information-system-database: # Name of our service # image: mongo # container_name: rems_dev_pharmacy-information-system-database @@ -165,7 +170,7 @@ volumes: external: true rems_dev_pims-sync: external: true - + rems_dev_keycloak-data: rems_dev_test-ehr-gradle: rems_dev_test-ehr-bin: @@ -187,7 +192,6 @@ volumes: rems_dev_dtr-nodeModules: rems_dev_dtr-databaseData: rems_dev_dtr-logs: - rems_dev_pims-nodeModules: - # rems_dev_pims-backend-nodeModules: - rems_dev_pims-logs: - # rems_dev_pims-database: + rems_dev_pims-nodeModules: # rems_dev_pims-backend-nodeModules: + + rems_dev_pims-logs: # rems_dev_pims-database: From e158f61e02df31f1d5e2b51c9990488ac23701ba Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Wed, 9 Nov 2022 17:11:35 -0500 Subject: [PATCH 05/83] docker file & dockerrunner --- Dockerfile.dev | 5 +++-- dockerRunnerDev.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100755 dockerRunnerDev.sh diff --git a/Dockerfile.dev b/Dockerfile.dev index eb43c9ce..e8a145de 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,4 +1,5 @@ -FROM ubuntu:latest +FROM node:14-alpine WORKDIR /REMS COPY . . -CMD ./dockerRunner.sh \ No newline at end of file +RUN npm install +CMD ./dockerRunnerDev.sh \ No newline at end of file diff --git a/dockerRunnerDev.sh b/dockerRunnerDev.sh new file mode 100755 index 00000000..41989438 --- /dev/null +++ b/dockerRunnerDev.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +# Handle closing application on signal interrupt (ctrl + c) +trap 'kill $CONTINUOUS_INSTALL_PID $SERVER_PID; gradle --stop; exit' INT + +mkdir logs +# Reset log file content for new application boot +echo "*** Logs for continuous installer ***" > ./logs/installer.log +echo "*** Logs for 'npm run start' ***" > ./logs/runner.log + +# Print that the application is starting in watch mode +echo "starting application in watch mode..." + +# Start the continious build listener process +echo "starting continuous installer..." +npm install + +( package_modify_time=$(stat -c %Y package.json) +package_lock_modify_time=$(stat -c %Y package-lock.json) +while sleep 1 +do + new_package_modify_time=$(stat -c %Y package.json) + new_package_lock_modify_time=$(stat -c %Y package-lock.json) + + if [[ "$package_modify_time" != "$new_package_modify_time" ]] || [[ "$package_lock_modify_time" != "$new_package_lock_modify_time" ]] + then + echo "running npm install..." + npm install | tee ./logs/installer.log + fi + + package_modify_time=$new_package_modify_time + package_lock_modify_time=$new_package_lock_modify_time + +done ) & CONTINUOUS_INSTALL_PID=$! + +# Start server process once initial build finishes +( npm run start | tee ./logs/runner.log ) & SERVER_PID=$! + +# Handle application background process exiting +wait $CONTINUOUS_INSTALL_PID $SERVER_PID +EXIT_CODE=$? +echo "application exited with exit code $EXIT_CODE..." + From bc9fbf8c82a21745c13aa4b8c38671861fa8008b Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Wed, 9 Nov 2022 17:39:25 -0500 Subject: [PATCH 06/83] Change to use node 18 to accomodate 'name' field in package.json --- Dockerfile.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index e8a145de..ce072618 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM node:14-alpine +FROM node:18-alpine WORKDIR /REMS COPY . . RUN npm install From edfdd746b46cde752e3caed4d45c9ba5f698afb4 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Wed, 9 Nov 2022 18:20:49 -0500 Subject: [PATCH 07/83] Add pims to workspace. Update ports. --- REMS.code-workspace | 3 +++ docker-compose-dev.yml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/REMS.code-workspace b/REMS.code-workspace index 7c49524c..6bee4879 100644 --- a/REMS.code-workspace +++ b/REMS.code-workspace @@ -21,6 +21,9 @@ }, { "path": "../pharmacy-information-system" + }, + { + "path": "../pims" } ], "launch": { diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index b3fb8601..bca515ac 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -109,7 +109,7 @@ services: container_name: rems_dev_rems ports: # Port binding to host from docker container - - "9020:9020" # Bind port 3000 of host to 3000 of container + - "9020:8090" # Bind port 3000 of host to 3000 of container volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important From 2b853232abb3d5894784722d9ac33b385a79e18b Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 10 Nov 2022 14:48:36 -0500 Subject: [PATCH 08/83] pr template updates --- .github/pull_request_template.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d6c3f687..94b45327 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,6 +10,10 @@ Please include the Jira Ticket Number and Link for this issue/task. - [ ] I have performed a self-review of my code - [ ] Ensure the target / base branch for any feature PR is set to `dev` not main (the only exception to this is releases from `dev` and hotfix branches) +## Checklist for conducting a review +- [ ] Review the code changes and make sure they all make sense and are necessary. +- [ ] Pull the PR branch locally and test by running through workflow and making sure everything works as it is supposed to. + ## Workflow Owner of the Pull Request will be responsible for merge after all requirements are met, including approval from at least one reviewer. Additional changes made after a review will dismiss any approvals and require re-review of the additional updates. Auto merging can be enabled below if additional changes are likely not to be needed. The bot will auto assign reviewers to your Pull Request for you. From 91b6d03ec28bd60760cd601fd7bda151e9ab8d29 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Wed, 16 Nov 2022 14:47:36 -0500 Subject: [PATCH 09/83] updating linting based on prettier. Adding gihub ci workflow --- .eslintignore | 0 .eslintrc | 14 ++++++++ .github/workflows/ci-workflow.yml | 36 +++++++++++++++++++ .prettierrc | 8 +++++ package.json | 17 ++++++--- src/config.js | 6 ++-- src/hooks/rems.hook.js | 60 ++++++++++++++++--------------- src/hooks/rems.hook.test.js | 4 +-- src/lib/winston.js | 6 ++-- src/lib/winston.test.js | 4 +-- src/main.js | 3 +- src/scripts/develop.js | 2 +- src/server.js | 4 +-- src/server.test.js | 12 +++---- 14 files changed, 123 insertions(+), 53 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .github/workflows/ci-workflow.yml create mode 100644 .prettierrc diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..e69de29b diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..e63c9dd8 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,14 @@ +{ + "extends": [ + "prettier" + ], + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "semi": ["error", "always"], + "quotes": ["error", "single", { "avoidEscape": true }], + + } +} \ No newline at end of file diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml new file mode 100644 index 00000000..09dda75c --- /dev/null +++ b/.github/workflows/ci-workflow.yml @@ -0,0 +1,36 @@ +name: Lint and Test + +on: [push, pull_request] + +jobs: + lint: + name: Check tsc, lint, and prettier + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: '12.x' + - run: npm install + - run: npm run lint + - run: npm run prettier + env: + CI: true + test: + name: Test on node ${{ matrix.node-version }} and ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [10, 12] + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test + env: + CI: true \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..912f7bb8 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "none", + "arrowParens": "avoid", + "endOfLine": "auto", + "printWidth": 100, + "tabWidth": 2, + "singleQuote": true +} \ No newline at end of file diff --git a/package.json b/package.json index afbe9902..78447fbb 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,10 @@ "develop": "node src/scripts/nodemon.js", "start": "node src/scripts/serve.js", "test": "jest", - "prettier": "prettier \"src/**/*.js\" --write", + "lint": "eslint \"**/*.{js,ts}\"", + "lint:fix": "eslint \"**/*.{js,ts}\" --quiet --fix", + "prettier": "prettier --check \"**/*.{js,ts}\"", + "prettier:fix": "prettier --write \"**/*.{js,ts}\"", "changelog": "conventional-changelog -p angular -s -i CHANGELOG.md" }, "repository": { @@ -51,8 +54,14 @@ "winston-daily-rotate-file": "^4.2.1" }, "devDependencies": { - "eslint": "^7.0.0", - "jest": "^26.0.1", - "prettier": "^2.0.5" + "prettier": "^2.0.5", + "eslint": "^8.5.0", + "eslint-config-prettier": "^6.10.1", + "jest": "^27.4.5", + "jest-extended": "^1.2.0", + "json-diff": "^0.9.0", + "ts-jest": "^27.1.2", + "ts-node": "^9.1.1", + "typescript": "^4.8.4" } } diff --git a/src/config.js b/src/config.js index d999de4a..560c91d1 100644 --- a/src/config.js +++ b/src/config.js @@ -1,10 +1,10 @@ module.exports = { server: { port: 8090, - discoveryEndpoint: '/cds-services', + discoveryEndpoint: '/cds-services' }, logging: { - level: 'info', - }, + level: 'info' + } }; diff --git a/src/hooks/rems.hook.js b/src/hooks/rems.hook.js index 1728ed6e..6789f43c 100644 --- a/src/hooks/rems.hook.js +++ b/src/hooks/rems.hook.js @@ -1,4 +1,4 @@ -const { kebabCase } = require("lodash"); +const { kebabCase } = require('lodash'); const definition = { hook: 'order-sign', @@ -7,34 +7,34 @@ const definition = { id: 'rems-order-sign', prefetch: { patient: 'Patient/{{context.patientId}}', - request:'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', + request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', practitioner: 'Practitioner/{{context.userId}}' - }, + } }; -const sourceLabel = "MCODE REMS Administrator Prototype"; -const sourceUrl = "https://github.com/mcode/REMS"; +const sourceLabel = 'MCODE REMS Administrator Prototype'; +const sourceUrl = 'https://github.com/mcode/REMS'; function buildErrorCard(reason) { console.log(reason); let cards = { cards: [ { - summary: "Bad Request", + summary: 'Bad Request', detail: reason, source: { label: sourceLabel, url: sourceUrl }, - indicator: 'warning', - }, - ], + indicator: 'warning' + } + ] }; return cards; -}; +} const handler = (req, res) => { - console.log("REMS order-sign hook") + console.log('REMS order-sign hook'); try { const context = req.body.context; const contextRequest = context.draftOrders.entry[0]; @@ -44,27 +44,32 @@ const handler = (req, res) => { const practitioner = prefetch.practitioner; const npi = practitioner.identifier[0].value; - console.log(" MedicationRequest: " + prefetchRequest.id); - console.log(" Practitioner: " + practitioner.id + " NPI: " + npi); - console.log(" Patient: " + patient.id); + console.log(' MedicationRequest: ' + prefetchRequest.id); + console.log(' Practitioner: ' + practitioner.id + ' NPI: ' + npi); + console.log(' Patient: ' + patient.id); // verify a MedicationRequest was sent - if (contextRequest.resourceType !== "MedicationRequest") { - res.json(buildErrorCard("DraftOrders does not contain a MedicationRequest")); + if (contextRequest.resourceType !== 'MedicationRequest') { + res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); return; } // verify ids - if (patient.id.replace('Patient/','') !== context.patientId.replace('Patient/','')) { - res.json(buildErrorCard("Context patientId does not match prefetch Patient ID")); + if (patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '')) { + res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); return; } - if (practitioner.id.replace('Practitioner/','') !== context.userId.replace('Practitioner/','')) { - res.json(buildErrorCard("Context userId does not match prefetch Practitioner ID")); + if ( + practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') + ) { + res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); return; } - if (prefetchRequest.id.replace('MedicationRequest/','') !== contextRequest.id.replace('MedicationRequest/','')) { - res.json(buildErrorCard("Context draftOrder does not match prefetch MedicationRequest ID")); + if ( + prefetchRequest.id.replace('MedicationRequest/', '') !== + contextRequest.id.replace('MedicationRequest/', '') + ) { + res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); return; } @@ -77,17 +82,16 @@ const handler = (req, res) => { detail: `Detail: ${text}`, source: { label: sourceLabel, - url: sourceUrl, + url: sourceUrl }, - indicator: 'info', - }, - ], + indicator: 'info' + } + ] }; res.json(cards); - } catch (error) { console.log(error); - res.json(buildErrorCard("Unknown Error")); + res.json(buildErrorCard('Unknown Error')); } }; diff --git a/src/hooks/rems.hook.test.js b/src/hooks/rems.hook.test.js index 2a298ef0..6118871c 100644 --- a/src/hooks/rems.hook.test.js +++ b/src/hooks/rems.hook.test.js @@ -9,9 +9,9 @@ describe('hook: test rems', () => { id: 'rems-order-sign', prefetch: { patient: 'Patient/{{context.patientId}}', - request:'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', + request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', practitioner: 'Practitioner/{{context.userId}}' - }, + } }; expect(getREMSHook).toHaveProperty('definition'); expect(getREMSHook).toHaveProperty('handler'); diff --git a/src/lib/winston.js b/src/lib/winston.js index a62583c9..fb27408b 100644 --- a/src/lib/winston.js +++ b/src/lib/winston.js @@ -13,7 +13,7 @@ let applicationTransports = []; let transportConsole = new transports.Console({ level: logging.level, timestamp: true, - colorize: true, + colorize: true }); applicationTransports.push(transportConsole); @@ -25,7 +25,7 @@ if (logging.directory) { datePattern: 'YYYY-MM-DD-HH', level: logging.level, zippedArchive: true, - maxSize: '20m', + maxSize: '20m' }); applicationTransports.push(transportDailyFile); @@ -34,7 +34,7 @@ if (logging.directory) { // Add a default application logger container.add('application', { format: format.combine(format.timestamp(), format.logstash()), - transports: applicationTransports, + transports: applicationTransports }); /** diff --git a/src/lib/winston.test.js b/src/lib/winston.test.js index eb2c0c34..ebd4522f 100644 --- a/src/lib/winston.test.js +++ b/src/lib/winston.test.js @@ -24,8 +24,8 @@ describe('Logger Class', () => { jest.mock('../config', () => ({ logging: { level: 'debug', - directory: 'logs', - }, + directory: 'logs' + } })); const config = require('../config'); diff --git a/src/main.js b/src/main.js index f1a4d234..b04c7e92 100644 --- a/src/main.js +++ b/src/main.js @@ -16,8 +16,7 @@ module.exports = async function main() { // Build our server logger.info('Initializing REMS Administrator'); - const app = initialize(config) - .registerService(remsService); + const app = initialize(config).registerService(remsService); const { server: serverConfig } = config; diff --git a/src/scripts/develop.js b/src/scripts/develop.js index 7aedd887..0c51d7c3 100644 --- a/src/scripts/develop.js +++ b/src/scripts/develop.js @@ -8,7 +8,7 @@ nodemon({ ext: 'js json', verbose: true, watch: ['src/**/*.json', 'src/**/*.js'], - ignore: ['node_modules'], + ignore: ['node_modules'] }); nodemon diff --git a/src/server.js b/src/server.js index d05e82b4..fb625a75 100644 --- a/src/server.js +++ b/src/server.js @@ -7,7 +7,7 @@ const _ = require('lodash'); let logger = container.get('application'); -const initialize = (config) => { +const initialize = config => { const logLevel = _.get(config, 'logging.level'); return new REMSServer().configureLogstream(logLevel).configureMiddleware(); }; @@ -54,7 +54,7 @@ class REMSServer { log ? log : morgan('combined', { - stream: { write: (message) => logger[level](message) }, + stream: { write: message => logger[level](message) } }) ); diff --git a/src/server.test.js b/src/server.test.js index 665d3b11..b482ec4c 100644 --- a/src/server.test.js +++ b/src/server.test.js @@ -11,7 +11,7 @@ describe('REMSServer class', () => { // Mock express and body parser jest.mock('body-parser', () => ({ urlencoded: jest.fn(), - json: jest.fn(), + json: jest.fn() })); jest.mock('express', () => { @@ -21,7 +21,7 @@ describe('REMSServer class', () => { get: jest.fn(), listen: jest.fn(), options: jest.fn(), - post: jest.fn(), + post: jest.fn() })); // Mock the static directory function mock.static = jest.fn(); @@ -67,11 +67,11 @@ describe('REMSServer class', () => { hook: 'patient-view', name: 'foo', description: 'bar', - id: 'foobar', + id: 'foobar' }, handler: (req, res) => { res.json('hello world'); - }, + } }; server.registerService(mockService); @@ -81,8 +81,8 @@ describe('REMSServer class', () => { hook: 'patient-view', name: 'foo', description: 'bar', - id: 'foobar', - }, + id: 'foobar' + } ]); }); test('Method: listen', () => { From e91b605dc4a66a76bac3992971f7564e25b3fc15 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Wed, 16 Nov 2022 18:11:37 -0500 Subject: [PATCH 10/83] scoping tests to node 12 --- .github/workflows/ci-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 09dda75c..a0ea4b92 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [10, 12] + node-version: [12] steps: - uses: actions/checkout@v1 From 8b7317a5af22428bd4f241620aac676170db6161 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Wed, 16 Nov 2022 18:14:36 -0500 Subject: [PATCH 11/83] updating name, capital letters and spaces are not allowed in the name field --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78447fbb..a5bd3d02 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "REMS Administrator", + "name": "rems-administrator", "version": "1.0.0", "description": "A starter project emphasizing best practices for creating CDS Services", "main": "main.js", From d599ae90028a1765504a87d6b489c8834b40557b Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 17 Nov 2022 08:55:52 -0500 Subject: [PATCH 12/83] fixing issues with open handles for server tests. --- package.json | 2 +- src/server.js | 4 +--- src/server.test.js | 9 +++++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index a5bd3d02..1dfb74e6 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "scripts": { "develop": "node src/scripts/nodemon.js", "start": "node src/scripts/serve.js", - "test": "jest", + "test": "jest --maxWorkers=4 --coverage --detectOpenHandles", "lint": "eslint \"**/*.{js,ts}\"", "lint:fix": "eslint \"**/*.{js,ts}\" --quiet --fix", "prettier": "prettier --check \"**/*.{js,ts}\"", diff --git a/src/server.js b/src/server.js index fb625a75..fa053253 100644 --- a/src/server.js +++ b/src/server.js @@ -81,9 +81,7 @@ class REMSServer { listen({ port, discoveryEndpoint = '/cds-services' }, callback) { this.app.get(discoveryEndpoint, (req, res) => res.json({ services: this.services })); this.app.get('/', (req, res) => res.send('Welcome to the REMS Administrator')); - this.app.listen(port, callback); - - return this; + return this.app.listen(port, callback); } } diff --git a/src/server.test.js b/src/server.test.js index b482ec4c..0636a2a0 100644 --- a/src/server.test.js +++ b/src/server.test.js @@ -27,6 +27,7 @@ describe('REMSServer class', () => { mock.static = jest.fn(); return mock; }); + server = new REMSServer(); }); @@ -39,6 +40,7 @@ describe('REMSServer class', () => { expect(server).toHaveProperty('app'); expect(server).toHaveProperty('listen'); }); + test('method: configureMiddleware', () => { let set = jest.spyOn(server.app, 'set'); let use = jest.spyOn(server.app, 'use'); @@ -53,6 +55,7 @@ describe('REMSServer class', () => { expect(use).toHaveBeenCalledTimes(3); }); + test('method: configureLogstream', () => { let use = jest.spyOn(server.app, 'use'); @@ -85,18 +88,20 @@ describe('REMSServer class', () => { } ]); }); + test('Method: listen', () => { let listen = jest.spyOn(server.app, 'listen'); let callback = jest.fn(); // Start listening on a port and pass the callback through - server.listen({ port: 3000 }, callback); + let serverListen = server.listen({ port: 3000 }, callback); expect(listen).toHaveBeenCalledTimes(1); expect(listen.mock.calls[0][0]).toBe(3000); expect(listen.mock.calls[0][1]).toBe(callback); + serverListen.close(); }); + test('should be able to initilize a server', () => { const newServer = initialize(); - expect(newServer).toBeInstanceOf(REMSServer); expect(newServer).toHaveProperty('app'); expect(newServer).toHaveProperty('listen'); From b178bc76242d19aeabff6b364692073df59f7582 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 16 Nov 2022 14:28:22 -0500 Subject: [PATCH 13/83] change to typescript --- .gitignore | 1 + nodemon.json | 6 ++ package.json | 21 ++-- src/cards/Card.ts | 32 ++++++ src/cards/ErrorCard.ts | 6 ++ src/hooks/Hook.ts | 9 ++ src/hooks/OrderSign.ts | 17 ++++ src/hooks/OrderSignRequest.ts | 27 +++++ src/hooks/Prefetch/OrderSignPrefetch.ts | 5 + .../Prefetch/OrderSignRequestPrefetch.ts | 7 ++ src/hooks/Prefetch/RequestPrefetch.ts | 5 + src/hooks/Prefetch/ServicePrefetch.ts | 3 + src/hooks/rems.hook.js | 98 ------------------- src/hooks/rems.hook.ts | 91 +++++++++++++++++ src/lib/winston.js | 45 --------- src/lib/winston.ts | 33 +++++++ src/{main.js => main.ts} | 8 +- src/scripts/{develop.js => develop.ts} | 6 +- src/scripts/serve.js | 3 - src/scripts/serve.ts | 3 + src/{server.js => server.ts} | 38 ++++--- tsconfig.json | 27 +++++ 22 files changed, 315 insertions(+), 176 deletions(-) create mode 100644 nodemon.json create mode 100644 src/cards/Card.ts create mode 100644 src/cards/ErrorCard.ts create mode 100644 src/hooks/Hook.ts create mode 100644 src/hooks/OrderSign.ts create mode 100644 src/hooks/OrderSignRequest.ts create mode 100644 src/hooks/Prefetch/OrderSignPrefetch.ts create mode 100644 src/hooks/Prefetch/OrderSignRequestPrefetch.ts create mode 100644 src/hooks/Prefetch/RequestPrefetch.ts create mode 100644 src/hooks/Prefetch/ServicePrefetch.ts delete mode 100644 src/hooks/rems.hook.js create mode 100644 src/hooks/rems.hook.ts delete mode 100644 src/lib/winston.js create mode 100644 src/lib/winston.ts rename src/{main.js => main.ts} (75%) rename src/scripts/{develop.js => develop.ts} (73%) delete mode 100644 src/scripts/serve.js create mode 100644 src/scripts/serve.ts rename src/{server.js => server.ts} (62%) create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index ab140fa4..0f267621 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ package-lock.json COVERAGE/ logs/ node_modules/ +dist/ \ No newline at end of file diff --git a/nodemon.json b/nodemon.json new file mode 100644 index 00000000..d09de344 --- /dev/null +++ b/nodemon.json @@ -0,0 +1,6 @@ +{ + "watch": ["src"], + "ext": ".ts,.js", + "ignore": [], + "exec": "ts-node ./src/main.ts" + } \ No newline at end of file diff --git a/package.json b/package.json index 1dfb74e6..152d72d8 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,13 @@ "doc": "doc" }, "scripts": { - "develop": "node src/scripts/nodemon.js", - "start": "node src/scripts/serve.js", + "develop": "node dist/scripts/develop.js", + "start": "ts-node-dev src/scripts/serve.ts", "test": "jest --maxWorkers=4 --coverage --detectOpenHandles", "lint": "eslint \"**/*.{js,ts}\"", "lint:fix": "eslint \"**/*.{js,ts}\" --quiet --fix", "prettier": "prettier --check \"**/*.{js,ts}\"", - "prettier:fix": "prettier --write \"**/*.{js,ts}\"", - "changelog": "conventional-changelog -p angular -s -i CHANGELOG.md" + "prettier:fix": "prettier --write \"**/*.{js,ts}\"" }, "repository": { "type": "git", @@ -42,6 +41,7 @@ ] }, "dependencies": { + "@types/fhir": "^0.0.35", "body-parser": "^1.19.0", "conventional-changelog-cli": "^2.0.34", "cors": "^2.8.5", @@ -49,19 +49,26 @@ "lodash": "^4.17.19", "moment": "^2.24.0", "morgan": "^1.9.1", - "nodemon": "^1.19.4", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.2.1" }, "devDependencies": { - "prettier": "^2.0.5", + "@types/cors": "^2.8.12", + "@types/express": "^4.17.14", + "@types/lodash": "^4.14.188", + "@types/morgan": "^1.9.3", + "@types/node": "^18.11.9", + "@types/nodemon": "^1.19.2", "eslint": "^8.5.0", "eslint-config-prettier": "^6.10.1", "jest": "^27.4.5", "jest-extended": "^1.2.0", "json-diff": "^0.9.0", + "nodemon": "^2.0.20", + "prettier": "^2.0.5", + "ts-node": "^10.9.1", "ts-jest": "^27.1.2", - "ts-node": "^9.1.1", + "ts-node-dev": "^2.0.0", "typescript": "^4.8.4" } } diff --git a/src/cards/Card.ts b/src/cards/Card.ts new file mode 100644 index 00000000..e9560b54 --- /dev/null +++ b/src/cards/Card.ts @@ -0,0 +1,32 @@ +export default class Card { + + summary: string + detail: string + sourceLabel: string + sourceUrl: string + indicator: string + + constructor(summary: string, detail: string, sourceLabel: string, sourceUrl: string, indicator: string = "info") { + this.summary = summary + this.detail = detail + this.sourceLabel = sourceLabel + this.sourceUrl = sourceUrl + this.indicator = indicator + } + + get card(){ + return this.generateCard() + } + + generateCard(){ + return { + summary: this.summary, + detail: this.detail, + source: { + label: this.sourceLabel, + url: this.sourceUrl + }, + indicator: this.indicator + } + } +} \ No newline at end of file diff --git a/src/cards/ErrorCard.ts b/src/cards/ErrorCard.ts new file mode 100644 index 00000000..456ba343 --- /dev/null +++ b/src/cards/ErrorCard.ts @@ -0,0 +1,6 @@ +import Card from "./Card" +export default class ErrorCard extends Card{ + constructor(summary:string, detail:string, label:string, url:string, indicator:string = "error"){ + super(summary, detail, label, url, indicator) + } +} \ No newline at end of file diff --git a/src/hooks/Hook.ts b/src/hooks/Hook.ts new file mode 100644 index 00000000..86b0bcb0 --- /dev/null +++ b/src/hooks/Hook.ts @@ -0,0 +1,9 @@ +import ServicePrefetch from "./Prefetch/ServicePrefetch"; + +export default interface Hook{ + id:string + hook: string + name: string + description: string + prefetch: ServicePrefetch +} \ No newline at end of file diff --git a/src/hooks/OrderSign.ts b/src/hooks/OrderSign.ts new file mode 100644 index 00000000..d0d21c2f --- /dev/null +++ b/src/hooks/OrderSign.ts @@ -0,0 +1,17 @@ +import Hook from "./Hook"; +import OrderSignPrefetch from "./Prefetch/OrderSignPrefetch"; + +export default class OrderSign implements Hook{ + id:string + hook: string + name: string + description: string + prefetch: OrderSignPrefetch + constructor(id:string, hook:string, name:string, description: string, prefetch: OrderSignPrefetch){ + this.id = id + this.hook = hook + this.name = name + this.description = description + this.prefetch = prefetch + } +} \ No newline at end of file diff --git a/src/hooks/OrderSignRequest.ts b/src/hooks/OrderSignRequest.ts new file mode 100644 index 00000000..09e0a544 --- /dev/null +++ b/src/hooks/OrderSignRequest.ts @@ -0,0 +1,27 @@ +import { Bundle } from "fhir/r4"; +import { Resource } from "fhir/r4"; +import { Url } from "url"; +import OrderSignRequestPrefetch from "./Prefetch/OrderSignRequestPrefetch"; +// https://cds-hooks.hl7.org/1.0/#fhir-resource-access +interface FhirAuthorization { + token_type: string + expires_in: number + scope: string + subject: string +} +// https://cds-hooks.org/hooks/order-sign/#context +interface OrderSignContext { + userId: string + patientId: string + encounterId?: string + draftOrders: Bundle +} +// https://cds-hooks.hl7.org/1.0/#calling-a-cds-service +export default interface OrderSignRequest{ + hook: string + hookInstance: string + fhirServer: Url + fhirAuthorization: FhirAuthorization + context: OrderSignContext + prefetch: OrderSignRequestPrefetch +} \ No newline at end of file diff --git a/src/hooks/Prefetch/OrderSignPrefetch.ts b/src/hooks/Prefetch/OrderSignPrefetch.ts new file mode 100644 index 00000000..dc631ae7 --- /dev/null +++ b/src/hooks/Prefetch/OrderSignPrefetch.ts @@ -0,0 +1,5 @@ +export default interface OrderSignPrefetch{ + patient?: string + request?: string + practitioner?: string +} \ No newline at end of file diff --git a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts new file mode 100644 index 00000000..63b9b4dd --- /dev/null +++ b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts @@ -0,0 +1,7 @@ +import { MedicationRequest, Patient, Practitioner } from "fhir/r4"; +import RequestPrefetch from "./RequestPrefetch"; +export default interface OrderSignRequestPrefetch extends RequestPrefetch { + patient: Patient + request: MedicationRequest + practitioner: Practitioner +} \ No newline at end of file diff --git a/src/hooks/Prefetch/RequestPrefetch.ts b/src/hooks/Prefetch/RequestPrefetch.ts new file mode 100644 index 00000000..3f8f9754 --- /dev/null +++ b/src/hooks/Prefetch/RequestPrefetch.ts @@ -0,0 +1,5 @@ +import { Resource } from "fhir/r4"; + +export default interface RequestPrefetch { + [key: string]: Resource +} \ No newline at end of file diff --git a/src/hooks/Prefetch/ServicePrefetch.ts b/src/hooks/Prefetch/ServicePrefetch.ts new file mode 100644 index 00000000..17248dab --- /dev/null +++ b/src/hooks/Prefetch/ServicePrefetch.ts @@ -0,0 +1,3 @@ +export default interface ServicePrefetch{ + patient?: string +} \ No newline at end of file diff --git a/src/hooks/rems.hook.js b/src/hooks/rems.hook.js deleted file mode 100644 index 6789f43c..00000000 --- a/src/hooks/rems.hook.js +++ /dev/null @@ -1,98 +0,0 @@ -const { kebabCase } = require('lodash'); - -const definition = { - hook: 'order-sign', - name: 'REMS Requirement Lookup', - description: 'REMS Requirement Lookup', - id: 'rems-order-sign', - prefetch: { - patient: 'Patient/{{context.patientId}}', - request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', - practitioner: 'Practitioner/{{context.userId}}' - } -}; - -const sourceLabel = 'MCODE REMS Administrator Prototype'; -const sourceUrl = 'https://github.com/mcode/REMS'; - -function buildErrorCard(reason) { - console.log(reason); - let cards = { - cards: [ - { - summary: 'Bad Request', - detail: reason, - source: { - label: sourceLabel, - url: sourceUrl - }, - indicator: 'warning' - } - ] - }; - return cards; -} - -const handler = (req, res) => { - console.log('REMS order-sign hook'); - try { - const context = req.body.context; - const contextRequest = context.draftOrders.entry[0]; - const prefetch = req.body.prefetch; - const patient = prefetch.patient; - const prefetchRequest = prefetch.request; - const practitioner = prefetch.practitioner; - const npi = practitioner.identifier[0].value; - - console.log(' MedicationRequest: ' + prefetchRequest.id); - console.log(' Practitioner: ' + practitioner.id + ' NPI: ' + npi); - console.log(' Patient: ' + patient.id); - - // verify a MedicationRequest was sent - if (contextRequest.resourceType !== 'MedicationRequest') { - res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); - return; - } - - // verify ids - if (patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '')) { - res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); - return; - } - if ( - practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') - ) { - res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); - return; - } - if ( - prefetchRequest.id.replace('MedicationRequest/', '') !== - contextRequest.id.replace('MedicationRequest/', '') - ) { - res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); - return; - } - - const text = `REMS required for Patient ${patient.id}`; - - let cards = { - cards: [ - { - summary: `Summary: ${text}`, - detail: `Detail: ${text}`, - source: { - label: sourceLabel, - url: sourceUrl - }, - indicator: 'info' - } - ] - }; - res.json(cards); - } catch (error) { - console.log(error); - res.json(buildErrorCard('Unknown Error')); - } -}; - -module.exports = { definition, handler }; diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts new file mode 100644 index 00000000..4b17adc8 --- /dev/null +++ b/src/hooks/rems.hook.ts @@ -0,0 +1,91 @@ +import Card from '../cards/Card' +import ErrorCard from '../cards/ErrorCard' +import OrderSign from './OrderSign'; +import OrderSignRequest from './OrderSignRequest'; +import OrderSignPrefetch from './Prefetch/OrderSignPrefetch'; + +interface TypedRequestBody extends Express.Request { + body: OrderSignRequest +} + +const prefetch: OrderSignPrefetch = { + patient: 'Patient/{{context.patientId}}', + request:'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', + practitioner: 'Practitioner/{{context.userId}}' +} +const definition = new OrderSign('rems-order-sign', 'order-sign', 'REMS Requirement Lookup', 'REMS Requirement Lookup', prefetch) + +const sourceLabel = 'MCODE REMS Administrator Prototype'; +const sourceUrl = 'https://github.com/mcode/REMS'; + +function buildErrorCard(reason: string) { + console.log(reason); + const errorCard = new ErrorCard("Bad Request", reason, sourceLabel, sourceUrl, "warning") + let cards = { + cards: [ + errorCard.card + ], + }; + return cards; +} + +const handler = (req: TypedRequestBody, res: any) => { + console.log("REMS order-sign hook") + try { + const context = req.body.context; + const contextRequest = context?.draftOrders?.entry?.[0].resource; + const prefetch = req.body.prefetch; + const patient = prefetch.patient; + const prefetchRequest = prefetch.request; + const practitioner = prefetch.practitioner; + const npi = prefetch.practitioner.identifier + + const apo = practitioner?.identifier?.[0].value // null checking using ? operator + + console.log(' MedicationRequest: ' + prefetchRequest.id); + console.log(' Practitioner: ' + practitioner.id + ' NPI: ' + npi); + console.log(' Patient: ' + patient.id); + + // verify a MedicationRequest was sent + if (contextRequest && contextRequest.resourceType !== "MedicationRequest") { + res.json(buildErrorCard("DraftOrders does not contain a MedicationRequest")); + return; + } + + // verify ids + if (patient.id && patient.id.replace('Patient/','') !== context.patientId.replace('Patient/','')) { + res.json(buildErrorCard("Context patientId does not match prefetch Patient ID")); + return; + } + if (practitioner.id && practitioner.id.replace('Practitioner/','') !== context.userId.replace('Practitioner/','')) { + res.json(buildErrorCard("Context userId does not match prefetch Practitioner ID")); + return; + } + if ((prefetchRequest.id && contextRequest && contextRequest.id) && prefetchRequest.id.replace('MedicationRequest/','') !== contextRequest.id.replace('MedicationRequest/','')) { + res.json(buildErrorCard("Context draftOrder does not match prefetch MedicationRequest ID")); + return; + } + + const text = `REMS required for Patient ${patient.id}`; + + let cards = { + cards: [ + { + summary: `Summary: ${text}`, + detail: `Detail: ${text}`, + source: { + label: sourceLabel, + url: sourceUrl + }, + indicator: 'info' + } + ] + }; + res.json(cards); + } catch (error) { + console.log(error); + res.json(buildErrorCard('Unknown Error')); + } +}; + +export { definition, handler }; diff --git a/src/lib/winston.js b/src/lib/winston.js deleted file mode 100644 index fb27408b..00000000 --- a/src/lib/winston.js +++ /dev/null @@ -1,45 +0,0 @@ -const { Container, transports, format } = require('winston'); -const { logging } = require('../config.js'); -const path = require('path'); - -// Load in the daily file transport -require('winston-daily-rotate-file'); - -// Create our default logging container -let container = new Container(); -let applicationTransports = []; - -// Create a console transport -let transportConsole = new transports.Console({ - level: logging.level, - timestamp: true, - colorize: true -}); - -applicationTransports.push(transportConsole); - -// Create a file transport if we have specified the directory -if (logging.directory) { - let transportDailyFile = new transports.DailyRotateFile({ - filename: path.join(logging.directory, 'application-%DATE%.log'), - datePattern: 'YYYY-MM-DD-HH', - level: logging.level, - zippedArchive: true, - maxSize: '20m' - }); - - applicationTransports.push(transportDailyFile); -} - -// Add a default application logger -container.add('application', { - format: format.combine(format.timestamp(), format.logstash()), - transports: applicationTransports -}); - -/** - * @name exports - * @static - * @summary Logging container for the application - */ -module.exports = container; diff --git a/src/lib/winston.ts b/src/lib/winston.ts new file mode 100644 index 00000000..6d387b3c --- /dev/null +++ b/src/lib/winston.ts @@ -0,0 +1,33 @@ +import { Container, transports, format } from 'winston'; +import { logging } from '../config.js'; + +interface ConfigData{ + directory?: string + level: string +} +const logConfig: ConfigData = logging +// Load in the daily file transport +require('winston-daily-rotate-file'); + +// Create our default logging container +let container = new Container(); +let applicationTransports = []; + +// Create a console transport +let transportConsole = new transports.Console({ + level: logConfig.level, +}); + +applicationTransports.push(transportConsole); + +// Add a default application logger +container.add('application', { + format: format.combine(format.timestamp(), format.logstash()), + transports: applicationTransports, +}); +/** + * @name exports + * @static + * @summary Logging container for the application + */ +export default container diff --git a/src/main.js b/src/main.ts similarity index 75% rename from src/main.js rename to src/main.ts index b04c7e92..26a85e4e 100644 --- a/src/main.js +++ b/src/main.ts @@ -1,6 +1,6 @@ -const { initialize } = require('./server'); -const container = require('./lib/winston.js'); -const config = require('./config'); +import { initialize } from './server'; +import container from './lib/winston' +import config from './config'; const remsService = require('./hooks/rems.hook'); @@ -10,7 +10,7 @@ const remsService = require('./hooks/rems.hook'); * @summary Setup server and start the application * @function main */ -module.exports = async function main() { +export default async function main() { let logger = container.get('application'); // Build our server diff --git a/src/scripts/develop.js b/src/scripts/develop.ts similarity index 73% rename from src/scripts/develop.js rename to src/scripts/develop.ts index 0c51d7c3..85297a1d 100644 --- a/src/scripts/develop.js +++ b/src/scripts/develop.ts @@ -1,5 +1,5 @@ -const container = require('../lib/winston.js'); -const nodemon = require('nodemon'); +import container from '../lib/winston' +import nodemon from 'nodemon' let logger = container.get('application'); @@ -12,7 +12,7 @@ nodemon({ }); nodemon - .on('restart', files => logger.info(`Nodemon restarting because ${files.join(',')} changed.`)) + .on('restart', (files:File)=> logger.info(`Nodemon restarting because ${files.name} changed.`)) .on('crash', () => logger.info('Nodemon crashed. Waiting for changes to restart.')); // Make sure the process actually dies when hitting ctrl + c diff --git a/src/scripts/serve.js b/src/scripts/serve.js deleted file mode 100644 index baed1efe..00000000 --- a/src/scripts/serve.js +++ /dev/null @@ -1,3 +0,0 @@ -const main = require('../main.js'); - -main(); diff --git a/src/scripts/serve.ts b/src/scripts/serve.ts new file mode 100644 index 00000000..4d6a423a --- /dev/null +++ b/src/scripts/serve.ts @@ -0,0 +1,3 @@ +import main from '../main' + +main(); diff --git a/src/server.js b/src/server.ts similarity index 62% rename from src/server.js rename to src/server.ts index fa053253..457b812b 100644 --- a/src/server.js +++ b/src/server.ts @@ -1,13 +1,14 @@ -const express = require('express'); -const cors = require('cors'); -const bodyParser = require('body-parser'); -const container = require('./lib/winston.js'); -const morgan = require('morgan'); -const _ = require('lodash'); +import express from 'express' +import cors from 'cors' +import bodyParser from 'body-parser' +import container from './lib/winston' +import morgan from 'morgan' +import _ from 'lodash' +import Hook from './hooks/Hook' let logger = container.get('application'); -const initialize = config => { +const initialize = (config: any) => { const logLevel = _.get(config, 'logging.level'); return new REMSServer().configureLogstream(logLevel).configureMiddleware(); }; @@ -19,10 +20,13 @@ const initialize = config => { * @class Server */ class REMSServer { + app: any + services: Hook[] /** * @method constructor * @description Setup defaults for the server instance */ + constructor() { this.app = express(); this.services = []; @@ -37,7 +41,7 @@ class REMSServer { this.app.set('showStackError', true); this.app.set('jsonp callback', true); this.app.use(bodyParser.urlencoded({ limit: '50mb', extended: true })); - this.app.use(bodyParser.json({ limit: '50mb', extended: true })); + this.app.use(bodyParser.json({ limit: '50mb' })); this.app.use(cors()); this.app.options('*', cors()); @@ -49,19 +53,19 @@ class REMSServer { * @method configureLogstream * @description Enable streaming logs via morgan */ - configureLogstream({ log, level = 'info' } = {}) { + configureLogstream({ log, level = 'info' } : {log?:any, level?:string} = {}) { this.app.use( log ? log : morgan('combined', { - stream: { write: message => logger[level](message) } + stream: { write: (message) => logger.log(level, message)}, }) ); return this; } - registerService({ definition, handler }) { + registerService({ definition, handler } : {definition: any, handler: any}) { this.services.push(definition); this.app.post(`/cds-services/${definition.id}`, handler); @@ -78,13 +82,15 @@ class REMSServer { * @param {number} port - Defualt port to listen on * @param {function} [callback] - Optional callback for listen */ - listen({ port, discoveryEndpoint = '/cds-services' }, callback) { - this.app.get(discoveryEndpoint, (req, res) => res.json({ services: this.services })); - this.app.get('/', (req, res) => res.send('Welcome to the REMS Administrator')); - return this.app.listen(port, callback); + listen({ port, discoveryEndpoint = '/cds-services' }: any, callback: any) { + this.app.get(discoveryEndpoint, (req: any, res: { json: (arg0: { services: any }) => any }) => res.json({ services: this.services })); + this.app.get('/', (req: any, res: { send: (arg0: string) => any }) => res.send('Welcome to the REMS Administrator')); + this.app.listen(port, callback); + + return this; } } // Start the application -module.exports = { REMSServer, initialize }; +export { REMSServer, initialize }; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..ab777eb9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "outDir": "dist", + "jsx": "react-jsx" + }, + "include": [ + "src" + ] + } + \ No newline at end of file From 9d95c4d71da24495ea07eb6d9ef22b43ebbc0e62 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 16 Nov 2022 17:27:20 -0500 Subject: [PATCH 14/83] return card --- src/cards/Card.ts | 81 +++++++++++---- src/cards/ErrorCard.ts | 6 -- src/config.js | 4 +- src/hooks/OrderSignRequest.ts | 1 - src/hooks/rems.hook.ts | 186 +++++++++++++++++++++++++++------- 5 files changed, 217 insertions(+), 61 deletions(-) delete mode 100644 src/cards/ErrorCard.ts diff --git a/src/cards/Card.ts b/src/cards/Card.ts index e9560b54..2e1ac834 100644 --- a/src/cards/Card.ts +++ b/src/cards/Card.ts @@ -1,32 +1,77 @@ +import { Resource } from "fhir/r4" + +interface Source { + label: string + url: URL + icon?: URL +} +interface Action { + type: string + description: string + resource?: Resource | string +} +interface Suggestion { + label: string + uuid?: string + actions: Action[] +} +export interface Link { + label: string + url: URL + type: linkType + appContext?: string +} +type linkType = "absolute" | "smart" +type indicatorType = "info" | "warning" | "critical" export default class Card { summary: string - detail: string - sourceLabel: string - sourceUrl: string - indicator: string + detail?: string + indicator: indicatorType + source: Source + suggestions?: Suggestion[] + selectionBehavior?: string + links?: Link[] - constructor(summary: string, detail: string, sourceLabel: string, sourceUrl: string, indicator: string = "info") { + constructor(summary: string, detail: string, source: Source, indicator: indicatorType = "info") { this.summary = summary this.detail = detail - this.sourceLabel = sourceLabel - this.sourceUrl = sourceUrl + this.source = source this.indicator = indicator } get card(){ - return this.generateCard() + return this + } + addSuggestions(suggestions: Suggestion[]){ + if(this.suggestions){ + this.suggestions = this.suggestions.concat(suggestions) + } else { + this.suggestions = suggestions + } + } + addSuggestion(suggestion: Suggestion) { + if(this.suggestions) { + this.suggestions?.push(suggestion) + } else { + this.suggestions = [suggestion] + } + } + addLinks(links: Link[]){ + if(this.links){ + this.links = this.links.concat(links) + } else { + this.links = links + } + } + addLink(link: Link){ + if(this.links) { + this.links?.push(link) + } else { + this.links = [link] + } } - generateCard(){ - return { - summary: this.summary, - detail: this.detail, - source: { - label: this.sourceLabel, - url: this.sourceUrl - }, - indicator: this.indicator - } + return this } } \ No newline at end of file diff --git a/src/cards/ErrorCard.ts b/src/cards/ErrorCard.ts deleted file mode 100644 index 456ba343..00000000 --- a/src/cards/ErrorCard.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Card from "./Card" -export default class ErrorCard extends Card{ - constructor(summary:string, detail:string, label:string, url:string, indicator:string = "error"){ - super(summary, detail, label, url, indicator) - } -} \ No newline at end of file diff --git a/src/config.js b/src/config.js index 560c91d1..f2ca5b13 100644 --- a/src/config.js +++ b/src/config.js @@ -3,7 +3,9 @@ module.exports = { port: 8090, discoveryEndpoint: '/cds-services' }, - + smart: { + endpoint: 'http://localhost:3005/launch' + }, logging: { level: 'info' } diff --git a/src/hooks/OrderSignRequest.ts b/src/hooks/OrderSignRequest.ts index 09e0a544..abfa1bf0 100644 --- a/src/hooks/OrderSignRequest.ts +++ b/src/hooks/OrderSignRequest.ts @@ -1,5 +1,4 @@ import { Bundle } from "fhir/r4"; -import { Resource } from "fhir/r4"; import { Url } from "url"; import OrderSignRequestPrefetch from "./Prefetch/OrderSignRequestPrefetch"; // https://cds-hooks.hl7.org/1.0/#fhir-resource-access diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index 4b17adc8..e940ba1f 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -1,8 +1,111 @@ import Card from '../cards/Card' -import ErrorCard from '../cards/ErrorCard' import OrderSign from './OrderSign'; import OrderSignRequest from './OrderSignRequest'; import OrderSignPrefetch from './Prefetch/OrderSignPrefetch'; +import {Coding} from 'fhir/r4' +import { Link } from '../cards/Card'; +import config from '../config' + +const CARD_DETAILS = "Documentation Required, please complete form via Smart App link." +// TODO: this codemap should be replaced with a system similar to original CRD's questionnaire package operation +// the app doesn't necessarily have to use CQL for this. +const codeMap: {[key:string]: Link[]} = { + "2183126": [ + { + "label": "Documentation Requirements", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf") + }, + { + "label": "Medication Guide", + "type": "absolute", + "url": new URL("https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true") + }, + { + "label": "Patient Guide", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf") + }, + { + "label": "Patient Status Update Form", + "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientStatus", + "type": "smart", + "url": new URL(config.smart.endpoint) + }, + { + "label": "Patient Enrollment Form", + "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientEnrollment", + "type": "smart", + "url": new URL(config.smart.endpoint) + } + ], + "6064": [ + { + "label": "Documentation Requirements", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_REMS_Document.pdf") + }, + { + "label": "Fact Sheet", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Fact_Sheet.pdf") + }, + { + "label": "Guide For Patients Who Can Get Pregnant", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Guide_for_Patients_Who_Can_Get_pregnant.pdf") + }, + { + "label": "Contraceptive Counseling Guide", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Contraception_Counseling_Guide.pdf") + }, + { + "label": "Patient Enrollment Form", + "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/IPledgeRemsPatientEnrollment", + "type": "smart", + "url": new URL(config.smart.endpoint) + } + ], + "1237051":[ + { + "label": "Documentation Requirements", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_REMS_Document.pdf") + }, + { + "label": "Patient Counseling Guide", + "type": "absolute", + "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Patient_Counseling_Guide.pdf") + }, + { + "label": "Patient FAQ", + "type": "absolute", + "url": new URL("https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-patientfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A21Z&ske=2022-09-26T19%3A11%3A21Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A27%3A00Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=owSGAoUBZuCtsLE41F2XC3o12x%2BG%2Bt5ogykOIt796es%3D") + }, + { + "label": "Patient Enrollment Form", + "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TIRFRemsPatientEnrollment", + "type": "smart", + "url": new URL(config.smart.endpoint) + } + ] +} +// TODO: No hardcoding of valid codes +const validCodes: Coding[] = [ + { + code: '2183126', // Turalio + system: 'http://www.nlm.nih.gov/research/umls/rxnorm' + }, + { + code: '1237051', // TIRF + system: 'http://www.nlm.nih.gov/research/umls/rxnorm' + }, + { + code: '6064', // iPledge + system: 'http://www.nlm.nih.gov/research/umls/rxnorm' + }, +] interface TypedRequestBody extends Express.Request { body: OrderSignRequest @@ -14,13 +117,13 @@ const prefetch: OrderSignPrefetch = { practitioner: 'Practitioner/{{context.userId}}' } const definition = new OrderSign('rems-order-sign', 'order-sign', 'REMS Requirement Lookup', 'REMS Requirement Lookup', prefetch) - -const sourceLabel = 'MCODE REMS Administrator Prototype'; -const sourceUrl = 'https://github.com/mcode/REMS'; - +const source = { + label: "MCODE REMS Administrator Prototype", + url: new URL("https://github.com/mcode/REMS") +} function buildErrorCard(reason: string) { - console.log(reason); - const errorCard = new ErrorCard("Bad Request", reason, sourceLabel, sourceUrl, "warning") + + const errorCard = new Card("Bad Request", reason, source, "warning") let cards = { cards: [ errorCard.card @@ -33,18 +136,17 @@ const handler = (req: TypedRequestBody, res: any) => { console.log("REMS order-sign hook") try { const context = req.body.context; - const contextRequest = context?.draftOrders?.entry?.[0].resource; + const contextRequest = context.draftOrders?.entry?.[0].resource; + console.log(contextRequest) const prefetch = req.body.prefetch; - const patient = prefetch.patient; - const prefetchRequest = prefetch.request; - const practitioner = prefetch.practitioner; - const npi = prefetch.practitioner.identifier + const patient = prefetch?.patient; + const prefetchRequest = prefetch?.request; + const practitioner = prefetch?.practitioner; + const npi = practitioner?.identifier - const apo = practitioner?.identifier?.[0].value // null checking using ? operator - - console.log(' MedicationRequest: ' + prefetchRequest.id); - console.log(' Practitioner: ' + practitioner.id + ' NPI: ' + npi); - console.log(' Patient: ' + patient.id); + console.log(" MedicationRequest: " + prefetchRequest?.id); + console.log(" Practitioner: " + practitioner?.id + " NPI: " + npi); + console.log(" Patient: " + patient?.id); // verify a MedicationRequest was sent if (contextRequest && contextRequest.resourceType !== "MedicationRequest") { @@ -53,35 +155,49 @@ const handler = (req: TypedRequestBody, res: any) => { } // verify ids - if (patient.id && patient.id.replace('Patient/','') !== context.patientId.replace('Patient/','')) { + if (patient?.id && patient.id.replace('Patient/','') !== context.patientId.replace('Patient/','')) { res.json(buildErrorCard("Context patientId does not match prefetch Patient ID")); return; } - if (practitioner.id && practitioner.id.replace('Practitioner/','') !== context.userId.replace('Practitioner/','')) { + if (practitioner?.id && practitioner.id.replace('Practitioner/','') !== context.userId.replace('Practitioner/','')) { res.json(buildErrorCard("Context userId does not match prefetch Practitioner ID")); return; } - if ((prefetchRequest.id && contextRequest && contextRequest.id) && prefetchRequest.id.replace('MedicationRequest/','') !== contextRequest.id.replace('MedicationRequest/','')) { + if ((prefetchRequest?.id && contextRequest && contextRequest.id) && prefetchRequest.id.replace('MedicationRequest/','') !== contextRequest.id.replace('MedicationRequest/','')) { res.json(buildErrorCard("Context draftOrder does not match prefetch MedicationRequest ID")); return; } - const text = `REMS required for Patient ${patient.id}`; + const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0] + if(medicationCode && medicationCode.code){ + const returnCard = validCodes.some((e)=> { + return e.code === medicationCode.code && e.system === medicationCode.system + }) + if(returnCard){ + const card = new Card(medicationCode.display || "Rems", CARD_DETAILS, source, 'info') + const links = codeMap[medicationCode.code] + links.forEach((e) => { + if(e.type == 'absolute'){ // no construction needed + card.addLink(e) + } else { + // link is SMART + // TODO: smart links should be built with discovered questionnaires, not hard coded ones + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${contextRequest.insurance?.[0].reference}` + card.addLink(e) + } + }) + res.json({ + cards:[ + card + ] + }) + } else { + res.json(buildErrorCard("Unsupported code")); + } + } else { + res.json(buildErrorCard("MedicationRequest does not contain a code")); + } - let cards = { - cards: [ - { - summary: `Summary: ${text}`, - detail: `Detail: ${text}`, - source: { - label: sourceLabel, - url: sourceUrl - }, - indicator: 'info' - } - ] - }; - res.json(cards); } catch (error) { console.log(error); res.json(buildErrorCard('Unknown Error')); From e785ea3f621850e55a9821886f4cd0b9b829f800 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Thu, 17 Nov 2022 15:48:22 -0500 Subject: [PATCH 15/83] add example hook --- .gitignore | 3 +- src/resources/ExampleHook.json | 261 +++++++++++++++++++++++++++++++++ 2 files changed, 263 insertions(+), 1 deletion(-) create mode 100644 src/resources/ExampleHook.json diff --git a/.gitignore b/.gitignore index 0f267621..a56b10b3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ package-lock.json COVERAGE/ logs/ node_modules/ -dist/ \ No newline at end of file +dist/ +.idea/ \ No newline at end of file diff --git a/src/resources/ExampleHook.json b/src/resources/ExampleHook.json new file mode 100644 index 00000000..94f37f68 --- /dev/null +++ b/src/resources/ExampleHook.json @@ -0,0 +1,261 @@ +{ + "hookInstance": "d1577c69-dfbe-44ad-ba6d-3e05e953b2ea", + "hook": "order-sign", + "fhirServer": "http://localhost:8080/test-ehr/r4", + "fhirAuthorization": { + "access_token": "", + "token_type": "Bearer", + "expires_in": 300, + "scope": "patient/Patient.read patient/Observation.read", + "subject": "cds-service4" + }, + "context": { + "userId": "Practitioner/pra-sstrange", + "patientId": "pat017", + "encounterId": "enc89284", + "draftOrders": { + "resourceType": "Bundle", + "entry": [ + { + "resource": + { + "resourceType": "MedicationRequest", + "id": "pat017-mr-IPledge", + "medicationCodeableConcept": { + "coding": [ + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "code": "6064", + "display": "Isotretinoin 200 MG Oral Capsule" + } + ] + }, + "status": "active", + "intent": "order", + "subject": { + "reference": "Patient/pat017", + "display": "Jon Snow" + }, + "authoredOn": "2020-07-11", + "requester": { + "reference": "Practitioner/pra-sstrange", + "display": "Jane Doe" + }, + "reasonCode": [ + { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "52042003", + "display": "Systemic lupus erythematosus glomerulonephritis syndrome, World Health Organization class V (disorder)" + } + ] + } + ], + "insurance": [ + { + "reference": "Coverage/cov017" + } + ], + "dosageInstruction": [ + { + "sequence": 1, + "text": "200mg twice daily", + "timing": { + "repeat": { + "frequency": 2, + "period": 1, + "periodUnit": "d" + } + }, + "route": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "26643006", + "display": "Oral route (qualifier value)" + } + ] + }, + "doseAndRate": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/dose-rate-type", + "code": "ordered", + "display": "Ordered" + } + ] + }, + "doseQuantity": { + "value": 200, + "unit": "mg", + "system": "http://unitsofmeasure.org", + "code": "mg" + } + } + ] + } + ], + "dispenseRequest": { + "quantity": { + "value": 90, + "system": "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm", + "code": "CAP" + }, + "numberOfRepeatsAllowed": 3 + } + } + } + ] + } + }, + "prefetch": { + "patient": { + "resourceType": "Patient", + "id": "pat017", + "gender": "male", + "birthDate": "1996-06-01", + "address": [ + { + "use": "home", + "type": "both", + "state": "Westeros", + "city": "Winterfell", + "postalCode": "00008", + "line": [ + "1 Winterfell Rd" + ] + } + ], + "name": [ + { + "use": "official", + "family": "Snow", + "given": [ + "Jon", + "Stark" + ] + } + ], + "identifier": [ + { + "system": "http://hl7.org/fhir/sid/us-medicare", + "value": "0V843229061TB" + } + ] + }, + "request": { + "resourceType": "MedicationRequest", + "id": "pat017-mr-IPledge", + "medicationCodeableConcept": { + "coding": [ + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "code": "6064", + "display": "Isotretinoin 200 MG Oral Capsule" + } + ] + }, + "status": "active", + "intent": "order", + "subject": { + "reference": "Patient/pat017", + "display": "Jon Snow" + }, + "authoredOn": "2020-07-11", + "requester": { + "reference": "Practitioner/pra-sstrange", + "display": "Jane Doe" + }, + "reasonCode": [ + { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "52042003", + "display": "Systemic lupus erythematosus glomerulonephritis syndrome, World Health Organization class V (disorder)" + } + ] + } + ], + "insurance": [ + { + "reference": "Coverage/cov017" + } + ], + "dosageInstruction": [ + { + "sequence": 1, + "text": "200mg twice daily", + "timing": { + "repeat": { + "frequency": 2, + "period": 1, + "periodUnit": "d" + } + }, + "route": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "26643006", + "display": "Oral route (qualifier value)" + } + ] + }, + "doseAndRate": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/dose-rate-type", + "code": "ordered", + "display": "Ordered" + } + ] + }, + "doseQuantity": { + "value": 200, + "unit": "mg", + "system": "http://unitsofmeasure.org", + "code": "mg" + } + } + ] + } + ], + "dispenseRequest": { + "quantity": { + "value": 90, + "system": "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm", + "code": "CAP" + }, + "numberOfRepeatsAllowed": 3 + } + }, + "practitioner": { + "resourceType": "Practitioner", + "id": "pra-sstrange", + "identifier": [ + { + "system": "http://hl7.org/fhir/sid/us-npi", + "value": "1122334466" + } + ], + "name": [ + { + "use": "official", + "family": "Strange", + "given": [ + "Stephen" + ], + "prefix": [ + "Dr." + ] + } + ] + } + } +} \ No newline at end of file From 9fbaa4c214fb3be24ebbfba450050320ce65206a Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Mon, 5 Dec 2022 16:24:24 -0500 Subject: [PATCH 16/83] linting and test typescript conversion --- .eslintrc | 11 +- package.json | 15 +- src/cards/Card.ts | 121 ++++---- src/{config.js => config.ts} | 2 +- src/hooks/Hook.ts | 16 +- src/hooks/OrderSign.ts | 36 ++- src/hooks/OrderSignRequest.ts | 38 +-- src/hooks/Prefetch/OrderSignPrefetch.ts | 10 +- .../Prefetch/OrderSignRequestPrefetch.ts | 12 +- src/hooks/Prefetch/RequestPrefetch.ts | 6 +- src/hooks/Prefetch/ServicePrefetch.ts | 6 +- src/hooks/rems.hook.test.js | 23 -- src/hooks/rems.hook.test.ts | 25 ++ src/hooks/rems.hook.ts | 270 ++++++++++-------- src/lib/winston.test.js | 43 --- src/lib/winston.test.ts | 46 +++ src/lib/winston.ts | 42 +-- src/main.ts | 9 +- src/scripts/develop.ts | 8 +- src/scripts/serve.ts | 2 +- src/{server.test.js => server.test.ts} | 32 +-- src/server.ts | 38 +-- 22 files changed, 443 insertions(+), 368 deletions(-) rename src/{config.js => config.ts} (90%) delete mode 100644 src/hooks/rems.hook.test.js create mode 100644 src/hooks/rems.hook.test.ts delete mode 100644 src/lib/winston.test.js create mode 100644 src/lib/winston.test.ts rename src/{server.test.js => server.test.ts} (76%) diff --git a/.eslintrc b/.eslintrc index e63c9dd8..bbb67807 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,13 +1,20 @@ { "extends": [ - "prettier" + "prettier", + "eslint:recommended", + "plugin:@typescript-eslint/recommended" ], + "plugins": [ + "@typescript-eslint" + ], + "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2018, "sourceType": "module" }, "rules": { - "semi": ["error", "always"], + "semi": ["off"], + "@typescript-eslint/semi": ["error", "always"], "quotes": ["error", "single", { "avoidEscape": true }], } diff --git a/package.json b/package.json index 152d72d8..17d2fc7e 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,12 @@ "url": "git+ssh://git@bitbucket.org/asymmetrik/carejourney-cds.git" }, "jest": { + "preset":"ts-jest", + "testEnvironment": "node", + "transform": { + "^.+\\.ts?$": "ts-jest" + }, + "transformIgnorePatterns": ["/node_modules/"], "testPathIgnorePatterns": [ "/src/config/env/test.js" ], @@ -55,20 +61,23 @@ "devDependencies": { "@types/cors": "^2.8.12", "@types/express": "^4.17.14", + "@types/jest": "^27.5.2", "@types/lodash": "^4.14.188", "@types/morgan": "^1.9.3", "@types/node": "^18.11.9", "@types/nodemon": "^1.19.2", - "eslint": "^8.5.0", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "eslint": "^8.28.0", "eslint-config-prettier": "^6.10.1", "jest": "^27.4.5", "jest-extended": "^1.2.0", "json-diff": "^0.9.0", "nodemon": "^2.0.20", "prettier": "^2.0.5", - "ts-node": "^10.9.1", "ts-jest": "^27.1.2", + "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", - "typescript": "^4.8.4" + "typescript": "^4.9.3" } } diff --git a/src/cards/Card.ts b/src/cards/Card.ts index 2e1ac834..c79b9103 100644 --- a/src/cards/Card.ts +++ b/src/cards/Card.ts @@ -1,77 +1,76 @@ -import { Resource } from "fhir/r4" +import { Resource } from 'fhir/r4'; interface Source { - label: string - url: URL - icon?: URL + label: string; + url: URL; + icon?: URL; } interface Action { - type: string - description: string - resource?: Resource | string + type: string; + description: string; + resource?: Resource | string; } interface Suggestion { - label: string - uuid?: string - actions: Action[] + label: string; + uuid?: string; + actions: Action[]; } export interface Link { - label: string - url: URL - type: linkType - appContext?: string + label: string; + url: URL; + type: linkType; + appContext?: string; } -type linkType = "absolute" | "smart" -type indicatorType = "info" | "warning" | "critical" +type linkType = 'absolute' | 'smart'; +type indicatorType = 'info' | 'warning' | 'critical'; export default class Card { + summary: string; + detail?: string; + indicator: indicatorType; + source: Source; + suggestions?: Suggestion[]; + selectionBehavior?: string; + links?: Link[]; - summary: string - detail?: string - indicator: indicatorType - source: Source - suggestions?: Suggestion[] - selectionBehavior?: string - links?: Link[] + constructor(summary: string, detail: string, source: Source, indicator: indicatorType = 'info') { + this.summary = summary; + this.detail = detail; + this.source = source; + this.indicator = indicator; + } - constructor(summary: string, detail: string, source: Source, indicator: indicatorType = "info") { - this.summary = summary - this.detail = detail - this.source = source - this.indicator = indicator + get card() { + return this; + } + addSuggestions(suggestions: Suggestion[]) { + if (this.suggestions) { + this.suggestions = this.suggestions.concat(suggestions); + } else { + this.suggestions = suggestions; } - - get card(){ - return this - } - addSuggestions(suggestions: Suggestion[]){ - if(this.suggestions){ - this.suggestions = this.suggestions.concat(suggestions) - } else { - this.suggestions = suggestions - } - } - addSuggestion(suggestion: Suggestion) { - if(this.suggestions) { - this.suggestions?.push(suggestion) - } else { - this.suggestions = [suggestion] - } + } + addSuggestion(suggestion: Suggestion) { + if (this.suggestions) { + this.suggestions?.push(suggestion); + } else { + this.suggestions = [suggestion]; } - addLinks(links: Link[]){ - if(this.links){ - this.links = this.links.concat(links) - } else { - this.links = links - } + } + addLinks(links: Link[]) { + if (this.links) { + this.links = this.links.concat(links); + } else { + this.links = links; } - addLink(link: Link){ - if(this.links) { - this.links?.push(link) - } else { - this.links = [link] - } + } + addLink(link: Link) { + if (this.links) { + this.links?.push(link); + } else { + this.links = [link]; } - generateCard(){ - return this - } -} \ No newline at end of file + } + generateCard() { + return this; + } +} diff --git a/src/config.js b/src/config.ts similarity index 90% rename from src/config.js rename to src/config.ts index f2ca5b13..d086c9ac 100644 --- a/src/config.js +++ b/src/config.ts @@ -1,4 +1,4 @@ -module.exports = { +export default { server: { port: 8090, discoveryEndpoint: '/cds-services' diff --git a/src/hooks/Hook.ts b/src/hooks/Hook.ts index 86b0bcb0..a50007a0 100644 --- a/src/hooks/Hook.ts +++ b/src/hooks/Hook.ts @@ -1,9 +1,9 @@ -import ServicePrefetch from "./Prefetch/ServicePrefetch"; +import ServicePrefetch from './Prefetch/ServicePrefetch'; -export default interface Hook{ - id:string - hook: string - name: string - description: string - prefetch: ServicePrefetch -} \ No newline at end of file +export default interface Hook { + id: string; + hook: string; + name: string; + description: string; + prefetch: ServicePrefetch; +} diff --git a/src/hooks/OrderSign.ts b/src/hooks/OrderSign.ts index d0d21c2f..7ac9bb0c 100644 --- a/src/hooks/OrderSign.ts +++ b/src/hooks/OrderSign.ts @@ -1,17 +1,23 @@ -import Hook from "./Hook"; -import OrderSignPrefetch from "./Prefetch/OrderSignPrefetch"; +import Hook from './Hook'; +import OrderSignPrefetch from './Prefetch/OrderSignPrefetch'; -export default class OrderSign implements Hook{ - id:string - hook: string - name: string - description: string +export default class OrderSign implements Hook { + id: string; + hook: string; + name: string; + description: string; + prefetch: OrderSignPrefetch; + constructor( + id: string, + hook: string, + name: string, + description: string, prefetch: OrderSignPrefetch - constructor(id:string, hook:string, name:string, description: string, prefetch: OrderSignPrefetch){ - this.id = id - this.hook = hook - this.name = name - this.description = description - this.prefetch = prefetch - } -} \ No newline at end of file + ) { + this.id = id; + this.hook = hook; + this.name = name; + this.description = description; + this.prefetch = prefetch; + } +} diff --git a/src/hooks/OrderSignRequest.ts b/src/hooks/OrderSignRequest.ts index abfa1bf0..1a69b90a 100644 --- a/src/hooks/OrderSignRequest.ts +++ b/src/hooks/OrderSignRequest.ts @@ -1,26 +1,26 @@ -import { Bundle } from "fhir/r4"; -import { Url } from "url"; -import OrderSignRequestPrefetch from "./Prefetch/OrderSignRequestPrefetch"; +import { Bundle } from 'fhir/r4'; +import { Url } from 'url'; +import OrderSignRequestPrefetch from './Prefetch/OrderSignRequestPrefetch'; // https://cds-hooks.hl7.org/1.0/#fhir-resource-access interface FhirAuthorization { - token_type: string - expires_in: number - scope: string - subject: string + token_type: string; + expires_in: number; + scope: string; + subject: string; } // https://cds-hooks.org/hooks/order-sign/#context interface OrderSignContext { - userId: string - patientId: string - encounterId?: string - draftOrders: Bundle + userId: string; + patientId: string; + encounterId?: string; + draftOrders: Bundle; } // https://cds-hooks.hl7.org/1.0/#calling-a-cds-service -export default interface OrderSignRequest{ - hook: string - hookInstance: string - fhirServer: Url - fhirAuthorization: FhirAuthorization - context: OrderSignContext - prefetch: OrderSignRequestPrefetch -} \ No newline at end of file +export default interface OrderSignRequest { + hook: string; + hookInstance: string; + fhirServer: Url; + fhirAuthorization: FhirAuthorization; + context: OrderSignContext; + prefetch: OrderSignRequestPrefetch; +} diff --git a/src/hooks/Prefetch/OrderSignPrefetch.ts b/src/hooks/Prefetch/OrderSignPrefetch.ts index dc631ae7..08d7a453 100644 --- a/src/hooks/Prefetch/OrderSignPrefetch.ts +++ b/src/hooks/Prefetch/OrderSignPrefetch.ts @@ -1,5 +1,5 @@ -export default interface OrderSignPrefetch{ - patient?: string - request?: string - practitioner?: string -} \ No newline at end of file +export default interface OrderSignPrefetch { + patient?: string; + request?: string; + practitioner?: string; +} diff --git a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts index 63b9b4dd..39b37738 100644 --- a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts +++ b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts @@ -1,7 +1,7 @@ -import { MedicationRequest, Patient, Practitioner } from "fhir/r4"; -import RequestPrefetch from "./RequestPrefetch"; +import { MedicationRequest, Patient, Practitioner } from 'fhir/r4'; +import RequestPrefetch from './RequestPrefetch'; export default interface OrderSignRequestPrefetch extends RequestPrefetch { - patient: Patient - request: MedicationRequest - practitioner: Practitioner -} \ No newline at end of file + patient: Patient; + request: MedicationRequest; + practitioner: Practitioner; +} diff --git a/src/hooks/Prefetch/RequestPrefetch.ts b/src/hooks/Prefetch/RequestPrefetch.ts index 3f8f9754..efd8714d 100644 --- a/src/hooks/Prefetch/RequestPrefetch.ts +++ b/src/hooks/Prefetch/RequestPrefetch.ts @@ -1,5 +1,5 @@ -import { Resource } from "fhir/r4"; +import { Resource } from 'fhir/r4'; export default interface RequestPrefetch { - [key: string]: Resource -} \ No newline at end of file + [key: string]: Resource; +} diff --git a/src/hooks/Prefetch/ServicePrefetch.ts b/src/hooks/Prefetch/ServicePrefetch.ts index 17248dab..bc780f65 100644 --- a/src/hooks/Prefetch/ServicePrefetch.ts +++ b/src/hooks/Prefetch/ServicePrefetch.ts @@ -1,3 +1,3 @@ -export default interface ServicePrefetch{ - patient?: string -} \ No newline at end of file +export default interface ServicePrefetch { + patient?: string; +} diff --git a/src/hooks/rems.hook.test.js b/src/hooks/rems.hook.test.js deleted file mode 100644 index 6118871c..00000000 --- a/src/hooks/rems.hook.test.js +++ /dev/null @@ -1,23 +0,0 @@ -const getREMSHook = require('./rems.hook'); - -describe('hook: test rems', () => { - test('should have definition and handler', () => { - const expectedDefinition = { - hook: 'order-sign', - name: 'REMS Requirement Lookup', - description: 'REMS Requirement Lookup', - id: 'rems-order-sign', - prefetch: { - patient: 'Patient/{{context.patientId}}', - request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', - practitioner: 'Practitioner/{{context.userId}}' - } - }; - expect(getREMSHook).toHaveProperty('definition'); - expect(getREMSHook).toHaveProperty('handler'); - - expect(getREMSHook.definition).toStrictEqual(expectedDefinition); - expect(getREMSHook.handler).toBeInstanceOf(Function); - }); - test('should test the logic of handler', () => {}); -}); diff --git a/src/hooks/rems.hook.test.ts b/src/hooks/rems.hook.test.ts new file mode 100644 index 00000000..fa75f45b --- /dev/null +++ b/src/hooks/rems.hook.test.ts @@ -0,0 +1,25 @@ +import OrderSign from './OrderSign'; +import getREMSHook from './rems.hook'; + +describe('hook: test rems', () => { + test('should have definition and handler', () => { + const prefetch = { + patient: 'Patient/{{context.patientId}}', + request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', + practitioner: 'Practitioner/{{context.userId}}' + }; + const expectedDefinition = new OrderSign( + 'rems-order-sign', + 'order-sign', + 'REMS Requirement Lookup', + 'REMS Requirement Lookup', + prefetch + ); + + expect(getREMSHook).toHaveProperty('definition'); + expect(getREMSHook).toHaveProperty('handler'); + + expect(getREMSHook.definition).toStrictEqual(expectedDefinition); + expect(getREMSHook.handler).toBeInstanceOf(Function); + }); +}); diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index e940ba1f..6949e2bb 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -1,96 +1,120 @@ -import Card from '../cards/Card' +import Card from '../cards/Card'; import OrderSign from './OrderSign'; import OrderSignRequest from './OrderSignRequest'; import OrderSignPrefetch from './Prefetch/OrderSignPrefetch'; -import {Coding} from 'fhir/r4' +import { Coding } from 'fhir/r4'; import { Link } from '../cards/Card'; -import config from '../config' +import config from '../config'; -const CARD_DETAILS = "Documentation Required, please complete form via Smart App link." +const CARD_DETAILS = 'Documentation Required, please complete form via Smart App link.'; // TODO: this codemap should be replaced with a system similar to original CRD's questionnaire package operation // the app doesn't necessarily have to use CQL for this. -const codeMap: {[key:string]: Link[]} = { - "2183126": [ - { - "label": "Documentation Requirements", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf") - }, - { - "label": "Medication Guide", - "type": "absolute", - "url": new URL("https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true") - }, - { - "label": "Patient Guide", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf") - }, - { - "label": "Patient Status Update Form", - "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientStatus", - "type": "smart", - "url": new URL(config.smart.endpoint) - }, - { - "label": "Patient Enrollment Form", - "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientEnrollment", - "type": "smart", - "url": new URL(config.smart.endpoint) - } +const codeMap: { [key: string]: Link[] } = { + '2183126': [ + { + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf' + ) + }, + { + label: 'Medication Guide', + type: 'absolute', + url: new URL( + 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true' + ) + }, + { + label: 'Patient Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf' + ) + }, + { + label: 'Patient Status Update Form', + appContext: + 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientStatus', + type: 'smart', + url: new URL(config.smart.endpoint) + }, + { + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) + } ], - "6064": [ + '6064': [ { - "label": "Documentation Requirements", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_REMS_Document.pdf") + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_REMS_Document.pdf' + ) }, { - "label": "Fact Sheet", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Fact_Sheet.pdf") + label: 'Fact Sheet', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Fact_Sheet.pdf' + ) }, { - "label": "Guide For Patients Who Can Get Pregnant", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Guide_for_Patients_Who_Can_Get_pregnant.pdf") + label: 'Guide For Patients Who Can Get Pregnant', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Guide_for_Patients_Who_Can_Get_pregnant.pdf' + ) }, { - "label": "Contraceptive Counseling Guide", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Contraception_Counseling_Guide.pdf") + label: 'Contraceptive Counseling Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Contraception_Counseling_Guide.pdf' + ) }, { - "label": "Patient Enrollment Form", - "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/IPledgeRemsPatientEnrollment", - "type": "smart", - "url": new URL(config.smart.endpoint) + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/IPledgeRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) } ], - "1237051":[ + '1237051': [ { - "label": "Documentation Requirements", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_REMS_Document.pdf") + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_REMS_Document.pdf' + ) }, { - "label": "Patient Counseling Guide", - "type": "absolute", - "url": new URL("https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Patient_Counseling_Guide.pdf") + label: 'Patient Counseling Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Patient_Counseling_Guide.pdf' + ) }, { - "label": "Patient FAQ", - "type": "absolute", - "url": new URL("https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-patientfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A21Z&ske=2022-09-26T19%3A11%3A21Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A27%3A00Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=owSGAoUBZuCtsLE41F2XC3o12x%2BG%2Bt5ogykOIt796es%3D") + label: 'Patient FAQ', + type: 'absolute', + url: new URL( + 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-patientfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A21Z&ske=2022-09-26T19%3A11%3A21Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A27%3A00Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=owSGAoUBZuCtsLE41F2XC3o12x%2BG%2Bt5ogykOIt796es%3D' + ) }, { - "label": "Patient Enrollment Form", - "appContext": "questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TIRFRemsPatientEnrollment", - "type": "smart", - "url": new URL(config.smart.endpoint) + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TIRFRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) } ] -} +}; // TODO: No hardcoding of valid codes const validCodes: Coding[] = [ { @@ -104,104 +128,118 @@ const validCodes: Coding[] = [ { code: '6064', // iPledge system: 'http://www.nlm.nih.gov/research/umls/rxnorm' - }, -] + } +]; interface TypedRequestBody extends Express.Request { - body: OrderSignRequest + body: OrderSignRequest; } const prefetch: OrderSignPrefetch = { patient: 'Patient/{{context.patientId}}', - request:'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', + request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', practitioner: 'Practitioner/{{context.userId}}' -} -const definition = new OrderSign('rems-order-sign', 'order-sign', 'REMS Requirement Lookup', 'REMS Requirement Lookup', prefetch) +}; +const definition = new OrderSign( + 'rems-order-sign', + 'order-sign', + 'REMS Requirement Lookup', + 'REMS Requirement Lookup', + prefetch +); const source = { - label: "MCODE REMS Administrator Prototype", - url: new URL("https://github.com/mcode/REMS") -} + label: 'MCODE REMS Administrator Prototype', + url: new URL('https://github.com/mcode/REMS') +}; function buildErrorCard(reason: string) { - - const errorCard = new Card("Bad Request", reason, source, "warning") - let cards = { - cards: [ - errorCard.card - ], + const errorCard = new Card('Bad Request', reason, source, 'warning'); + const cards = { + cards: [errorCard.card] }; return cards; } const handler = (req: TypedRequestBody, res: any) => { - console.log("REMS order-sign hook") + console.log('REMS order-sign hook'); try { const context = req.body.context; const contextRequest = context.draftOrders?.entry?.[0].resource; - console.log(contextRequest) const prefetch = req.body.prefetch; const patient = prefetch?.patient; const prefetchRequest = prefetch?.request; const practitioner = prefetch?.practitioner; - const npi = practitioner?.identifier + const npi = practitioner?.identifier; - console.log(" MedicationRequest: " + prefetchRequest?.id); - console.log(" Practitioner: " + practitioner?.id + " NPI: " + npi); - console.log(" Patient: " + patient?.id); + console.log(' MedicationRequest: ' + prefetchRequest?.id); + console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); + console.log(' Patient: ' + patient?.id); // verify a MedicationRequest was sent - if (contextRequest && contextRequest.resourceType !== "MedicationRequest") { - res.json(buildErrorCard("DraftOrders does not contain a MedicationRequest")); + if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { + res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); return; } // verify ids - if (patient?.id && patient.id.replace('Patient/','') !== context.patientId.replace('Patient/','')) { - res.json(buildErrorCard("Context patientId does not match prefetch Patient ID")); + if ( + patient?.id && + patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') + ) { + res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); return; } - if (practitioner?.id && practitioner.id.replace('Practitioner/','') !== context.userId.replace('Practitioner/','')) { - res.json(buildErrorCard("Context userId does not match prefetch Practitioner ID")); + if ( + practitioner?.id && + practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') + ) { + res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); return; } - if ((prefetchRequest?.id && contextRequest && contextRequest.id) && prefetchRequest.id.replace('MedicationRequest/','') !== contextRequest.id.replace('MedicationRequest/','')) { - res.json(buildErrorCard("Context draftOrder does not match prefetch MedicationRequest ID")); + if ( + prefetchRequest?.id && + contextRequest && + contextRequest.id && + prefetchRequest.id.replace('MedicationRequest/', '') !== + contextRequest.id.replace('MedicationRequest/', '') + ) { + res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); return; } - const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0] - if(medicationCode && medicationCode.code){ - const returnCard = validCodes.some((e)=> { - return e.code === medicationCode.code && e.system === medicationCode.system - }) - if(returnCard){ - const card = new Card(medicationCode.display || "Rems", CARD_DETAILS, source, 'info') - const links = codeMap[medicationCode.code] - links.forEach((e) => { - if(e.type == 'absolute'){ // no construction needed - card.addLink(e) + const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; + if (medicationCode && medicationCode.code) { + const returnCard = validCodes.some(e => { + return e.code === medicationCode.code && e.system === medicationCode.system; + }); + if (returnCard) { + const card = new Card(medicationCode.display || 'Rems', CARD_DETAILS, source, 'info'); + const links = codeMap[medicationCode.code]; + links.forEach(e => { + if (e.type == 'absolute') { + // no construction needed + card.addLink(e); } else { // link is SMART // TODO: smart links should be built with discovered questionnaires, not hard coded ones - e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${contextRequest.insurance?.[0].reference}` - card.addLink(e) + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ + contextRequest.insurance?.[0].reference + }`; + card.addLink(e); } - }) + }); res.json({ - cards:[ - card - ] - }) + cards: [card] + }); } else { - res.json(buildErrorCard("Unsupported code")); + res.json(buildErrorCard('Unsupported code')); } } else { - res.json(buildErrorCard("MedicationRequest does not contain a code")); + res.json(buildErrorCard('MedicationRequest does not contain a code')); } - } catch (error) { console.log(error); res.json(buildErrorCard('Unknown Error')); } }; -export { definition, handler }; +export default { definition, handler }; diff --git a/src/lib/winston.test.js b/src/lib/winston.test.js deleted file mode 100644 index ebd4522f..00000000 --- a/src/lib/winston.test.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @NOTE: Reset modules in between tests so we can test the application of an - * environment based configuration that changes between runs. We need this - * for full coverage - */ -describe('Logger Class', () => { - beforeEach(() => { - jest.resetModules(); - }); - - test('setup without daily log file', () => { - const config = require('../config'); - const container = require('./winston'); - let logger = container.get('application'); - - expect(logger).toBeDefined(); - expect(logger.transports).toHaveLength(1); - expect(logger.transports[0].name).toBe('console'); - expect(logger.transports[0].level).toBe(config.logging.level); - }); - - test('setup with daily log file generation', () => { - // Mock the config to test other branch of if statement - jest.mock('../config', () => ({ - logging: { - level: 'debug', - directory: 'logs' - } - })); - - const config = require('../config'); - const container = require('./winston'); - let logger = container.get('application'); - - expect(logger).toBeDefined(); - expect(logger.transports).toHaveLength(2); - expect(logger.transports[0].name).toBe('console'); - expect(logger.transports[0].level).toBe(config.logging.level); - expect(logger.transports[1].name).toBe('dailyRotateFile'); - expect(logger.transports[1].level).toBe(config.logging.level); - expect(logger.transports[1].dirname).toBe(config.logging.directory); - }); -}); diff --git a/src/lib/winston.test.ts b/src/lib/winston.test.ts new file mode 100644 index 00000000..8c7058e6 --- /dev/null +++ b/src/lib/winston.test.ts @@ -0,0 +1,46 @@ +/* eslint @typescript-eslint/no-var-requires: "off" */ +/** + * @NOTE: Reset modules in between tests so we can test the application of an + * environment based configuration that changes between runs. We need this + * for full coverage + */ +import container from './winston'; +import config from '../config'; +import winston, { Container, transport, transports } from 'winston'; + +describe('Logger Class', () => { + beforeEach(() => { + jest.resetModules(); + }); + + test('setup without daily log file', () => { + const logger = container.get('application'); + + expect(logger).toBeDefined(); + expect(logger.transports).toHaveLength(1); + expect(logger.transports[0].level).toBe(config.logging.level); + }); + + test('setup with daily log file generation', () => { + // Mock the config to test other branch of if statement + jest.mock('../config', () => ({ + logging: { + level: 'debug', + directory: 'logs' + } + })); + const containerPromise = import('./winston'); + const configPromise = import('../config'); + containerPromise.then(container => { + configPromise.then(config => { + const logger = container.default.get('application'); + expect(logger).toBeDefined(); + expect(logger.transports).toHaveLength(2); + expect(logger.transports[0].level).toBe(config.default.logging.level); + expect(logger.transports[1].level).toBe(config.default.logging.level); + }); + }); + }); +}); + +export {}; diff --git a/src/lib/winston.ts b/src/lib/winston.ts index 6d387b3c..e3dc5909 100644 --- a/src/lib/winston.ts +++ b/src/lib/winston.ts @@ -1,33 +1,43 @@ -import { Container, transports, format } from 'winston'; -import { logging } from '../config.js'; - -interface ConfigData{ - directory?: string - level: string +import winston, { Container, transports, format } from 'winston'; +import config from '../config'; +import 'winston-daily-rotate-file'; +import path from 'path'; +const logging = config.logging; +interface ConfigData { + directory?: string; + level: string; } -const logConfig: ConfigData = logging -// Load in the daily file transport -require('winston-daily-rotate-file'); - +const logConfig: ConfigData = logging; // Create our default logging container -let container = new Container(); -let applicationTransports = []; +const container = new Container(); +const applicationTransports = []; // Create a console transport -let transportConsole = new transports.Console({ +const transportConsole = new transports.Console({ level: logConfig.level, + format: winston.format.combine(winston.format.colorize(), winston.format.json()) }); applicationTransports.push(transportConsole); - +if (logConfig.directory) { + const transportDailyFile = new transports.DailyRotateFile({ + filename: path.join(logConfig.directory, 'application-%DATE%.log'), + datePattern: 'YYYY-MM-DD-HH', + level: logging.level, + zippedArchive: true, + maxSize: '20m' + }); + applicationTransports.push(transportDailyFile); +} // Add a default application logger container.add('application', { format: format.combine(format.timestamp(), format.logstash()), - transports: applicationTransports, + transports: applicationTransports }); + /** * @name exports * @static * @summary Logging container for the application */ -export default container +export default container; diff --git a/src/main.ts b/src/main.ts index 26a85e4e..8369d49f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,7 @@ import { initialize } from './server'; -import container from './lib/winston' +import container from './lib/winston'; import config from './config'; - -const remsService = require('./hooks/rems.hook'); +import remsService from './hooks/rems.hook'; /** * @name exports @@ -11,7 +10,7 @@ const remsService = require('./hooks/rems.hook'); * @function main */ export default async function main() { - let logger = container.get('application'); + const logger = container.get('application'); // Build our server logger.info('Initializing REMS Administrator'); @@ -24,4 +23,4 @@ export default async function main() { app.listen(serverConfig, () => { logger.info('Application listening on port: ' + serverConfig.port); }); -}; +} diff --git a/src/scripts/develop.ts b/src/scripts/develop.ts index 85297a1d..02ea5f8e 100644 --- a/src/scripts/develop.ts +++ b/src/scripts/develop.ts @@ -1,7 +1,7 @@ -import container from '../lib/winston' -import nodemon from 'nodemon' +import container from '../lib/winston'; +import nodemon from 'nodemon'; -let logger = container.get('application'); +const logger = container.get('application'); nodemon({ script: 'src/scripts/develop.js', @@ -12,7 +12,7 @@ nodemon({ }); nodemon - .on('restart', (files:File)=> logger.info(`Nodemon restarting because ${files.name} changed.`)) + .on('restart', (files: File) => logger.info(`Nodemon restarting because ${files.name} changed.`)) .on('crash', () => logger.info('Nodemon crashed. Waiting for changes to restart.')); // Make sure the process actually dies when hitting ctrl + c diff --git a/src/scripts/serve.ts b/src/scripts/serve.ts index 4d6a423a..c5de57ec 100644 --- a/src/scripts/serve.ts +++ b/src/scripts/serve.ts @@ -1,3 +1,3 @@ -import main from '../main' +import main from '../main'; main(); diff --git a/src/server.test.js b/src/server.test.ts similarity index 76% rename from src/server.test.js rename to src/server.test.ts index 0636a2a0..5ef94386 100644 --- a/src/server.test.js +++ b/src/server.test.ts @@ -1,9 +1,10 @@ -const bodyParser = require('body-parser'); -const morgan = require('morgan'); -const { initialize, REMSServer } = require('./server'); +import bodyParser from 'body-parser'; +import morgan from 'morgan'; +import { initialize, REMSServer } from './server'; +import config from './config'; describe('REMSServer class', () => { - let server; + let server: REMSServer; beforeEach(() => { jest.mock('morgan', () => jest.fn()); @@ -15,16 +16,15 @@ describe('REMSServer class', () => { })); jest.mock('express', () => { - let mock = jest.fn(() => ({ + const mock = jest.fn(() => ({ use: jest.fn(), set: jest.fn(), get: jest.fn(), listen: jest.fn(), options: jest.fn(), - post: jest.fn() + post: jest.fn(), + static: jest.fn() })); - // Mock the static directory function - mock.static = jest.fn(); return mock; }); @@ -42,8 +42,8 @@ describe('REMSServer class', () => { }); test('method: configureMiddleware', () => { - let set = jest.spyOn(server.app, 'set'); - let use = jest.spyOn(server.app, 'use'); + const set = jest.spyOn(server.app, 'set'); + const use = jest.spyOn(server.app, 'use'); server.configureMiddleware(); @@ -57,7 +57,7 @@ describe('REMSServer class', () => { }); test('method: configureLogstream', () => { - let use = jest.spyOn(server.app, 'use'); + const use = jest.spyOn(server.app, 'use'); server.configureLogstream(); @@ -72,7 +72,7 @@ describe('REMSServer class', () => { description: 'bar', id: 'foobar' }, - handler: (req, res) => { + handler: (req: any, res: { json: (arg0: string) => void }) => { res.json('hello world'); } }; @@ -90,10 +90,10 @@ describe('REMSServer class', () => { }); test('Method: listen', () => { - let listen = jest.spyOn(server.app, 'listen'); - let callback = jest.fn(); + const listen = jest.spyOn(server.app, 'listen'); + const callback = jest.fn(); // Start listening on a port and pass the callback through - let serverListen = server.listen({ port: 3000 }, callback); + const serverListen = server.listen({ port: 3000 }, callback); expect(listen).toHaveBeenCalledTimes(1); expect(listen.mock.calls[0][0]).toBe(3000); expect(listen.mock.calls[0][1]).toBe(callback); @@ -101,7 +101,7 @@ describe('REMSServer class', () => { }); test('should be able to initilize a server', () => { - const newServer = initialize(); + const newServer = initialize(config); expect(newServer).toBeInstanceOf(REMSServer); expect(newServer).toHaveProperty('app'); expect(newServer).toHaveProperty('listen'); diff --git a/src/server.ts b/src/server.ts index 457b812b..cc128900 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,12 +1,12 @@ -import express from 'express' -import cors from 'cors' -import bodyParser from 'body-parser' -import container from './lib/winston' -import morgan from 'morgan' -import _ from 'lodash' -import Hook from './hooks/Hook' +import express from 'express'; +import cors from 'cors'; +import bodyParser from 'body-parser'; +import container from './lib/winston'; +import morgan from 'morgan'; +import _ from 'lodash'; +import Hook from './hooks/Hook'; -let logger = container.get('application'); +const logger = container.get('application'); const initialize = (config: any) => { const logLevel = _.get(config, 'logging.level'); @@ -20,8 +20,8 @@ const initialize = (config: any) => { * @class Server */ class REMSServer { - app: any - services: Hook[] + app: express.Application; + services: Hook[]; /** * @method constructor * @description Setup defaults for the server instance @@ -53,19 +53,19 @@ class REMSServer { * @method configureLogstream * @description Enable streaming logs via morgan */ - configureLogstream({ log, level = 'info' } : {log?:any, level?:string} = {}) { + configureLogstream({ log, level = 'info' }: { log?: any; level?: string } = {}) { this.app.use( log ? log : morgan('combined', { - stream: { write: (message) => logger.log(level, message)}, + stream: { write: message => logger.log(level, message) } }) ); return this; } - registerService({ definition, handler } : {definition: any, handler: any}) { + registerService({ definition, handler }: { definition: any; handler: any }) { this.services.push(definition); this.app.post(`/cds-services/${definition.id}`, handler); @@ -83,11 +83,13 @@ class REMSServer { * @param {function} [callback] - Optional callback for listen */ listen({ port, discoveryEndpoint = '/cds-services' }: any, callback: any) { - this.app.get(discoveryEndpoint, (req: any, res: { json: (arg0: { services: any }) => any }) => res.json({ services: this.services })); - this.app.get('/', (req: any, res: { send: (arg0: string) => any }) => res.send('Welcome to the REMS Administrator')); - this.app.listen(port, callback); - - return this; + this.app.get(discoveryEndpoint, (req: any, res: { json: (arg0: { services: any }) => any }) => + res.json({ services: this.services }) + ); + this.app.get('/', (req: any, res: { send: (arg0: string) => any }) => + res.send('Welcome to the REMS Administrator') + ); + return this.app.listen(port, callback); } } From e666c99d2381880eb2e42c83ba9e8557c571543b Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 7 Dec 2022 01:32:08 -0500 Subject: [PATCH 17/83] Add tingodb and mongodb database support. --- env.json | 14 ++++++++++++++ package.json | 9 +++++++-- src/config.ts | 18 ++++++++++++++++++ src/constants.ts | 5 +++++ src/globals.ts | 5 +++++ src/lib/Database.ts | 13 +++++++++++++ src/lib/MongoDatabase.ts | 23 +++++++++++++++++++++++ src/lib/TingoDatabase.ts | 21 +++++++++++++++++++++ src/main.ts | 30 +++++++++++++++++++++++++++--- 9 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 env.json create mode 100644 src/constants.ts create mode 100644 src/globals.ts create mode 100644 src/lib/Database.ts create mode 100644 src/lib/MongoDatabase.ts create mode 100644 src/lib/TingoDatabase.ts diff --git a/env.json b/env.json new file mode 100644 index 00000000..f99929da --- /dev/null +++ b/env.json @@ -0,0 +1,14 @@ +{ + "MONGO_HOSTNAME": { + "type": "string", + "default": "localhost", + "required": true + }, + "MONGO_DB_NAME": { + "type": "string", + "test": "fhir-test", + "development": "fhir-development", + "default": "fhir", + "required": true + } +} diff --git a/package.json b/package.json index 17d2fc7e..641cb30f 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,14 @@ "url": "git+ssh://git@bitbucket.org/asymmetrik/carejourney-cds.git" }, "jest": { - "preset":"ts-jest", + "preset": "ts-jest", "testEnvironment": "node", "transform": { "^.+\\.ts?$": "ts-jest" }, - "transformIgnorePatterns": ["/node_modules/"], + "transformIgnorePatterns": [ + "/node_modules/" + ], "testPathIgnorePatterns": [ "/src/config/env/test.js" ], @@ -54,7 +56,10 @@ "express": "^4.17.1", "lodash": "^4.17.19", "moment": "^2.24.0", + "mongodb": "^4.12.1", "morgan": "^1.9.1", + "tingodb": "^0.6.1", + "var": "^0.4.0", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.2.1" }, diff --git a/src/config.ts b/src/config.ts index d086c9ac..e06b683a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,3 +1,5 @@ +const env = require('var'); + export default { server: { port: 8090, @@ -8,5 +10,21 @@ export default { }, logging: { level: 'info' + }, + database: { + selected: 'tingo', + tingoConfig: { + location: 'tingo_db', + options: '' + }, + mongoConfig: { + location: `mongodb://${env.MONGO_HOSTNAME}`, + db_name: env.MONGO_DB_NAME, + options: { + //auto_reconnect: true, + useUnifiedTopology: true, + useNewUrlParser: true, + }, + }, } }; diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 00000000..9ec5e808 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,5 @@ + +export default { + MONGO_DB: 'mongo', + TINGO_DB: 'tingo', +} diff --git a/src/globals.ts b/src/globals.ts new file mode 100644 index 00000000..1a181fbc --- /dev/null +++ b/src/globals.ts @@ -0,0 +1,5 @@ + +export class Globals { + static database: any + static databaseClient: any +} diff --git a/src/lib/Database.ts b/src/lib/Database.ts new file mode 100644 index 00000000..ab89a5b2 --- /dev/null +++ b/src/lib/Database.ts @@ -0,0 +1,13 @@ + +export abstract class Database{ + public location: string + public database: any + public client: any + + constructor(public config: any) { + this.location = config.location; + return this; + } + + abstract connect(): any +} diff --git a/src/lib/MongoDatabase.ts b/src/lib/MongoDatabase.ts new file mode 100644 index 00000000..cf3b9106 --- /dev/null +++ b/src/lib/MongoDatabase.ts @@ -0,0 +1,23 @@ +import { Database } from "./Database"; +import * as mongoDB from "mongodb" + +export class MongoDatabase extends Database { + options: any + db_name: string + + constructor(config: any) { + super(config); + this.options = config.options; + this.db_name = config.db_name; + return this; + } + + connect = () => + new Promise((resolve, reject) => { + // Connect to mongo + console.log("MongoDatabase connect: " + this.location); + this.client = new mongoDB.MongoClient(this.location); + this.database = this.client.db(this.db_name); + return this.client.connect(); + }); + } diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts new file mode 100644 index 00000000..698786b9 --- /dev/null +++ b/src/lib/TingoDatabase.ts @@ -0,0 +1,21 @@ +import { Database } from "./Database"; +const tingoDb = require('tingodb')(); + +export class TingoDatabase extends Database { + + constructor(config: any) { + super(config); + // read anything else needed from the config here + return this; + } + + connect = () => + new Promise((resolve, reject) => { + // Connect to tingo + console.log("TingoDatabase connect: " + this.location); + this.database = new tingoDb.Db(this.location, {}) + this.client = ""; + return resolve(this.database); + }); + +} diff --git a/src/main.ts b/src/main.ts index 8369d49f..5c148511 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,7 +2,11 @@ import { initialize } from './server'; import container from './lib/winston'; import config from './config'; import remsService from './hooks/rems.hook'; - +import { Database } from './lib/Database'; +import { TingoDatabase } from './lib/TingoDatabase'; +import { MongoDatabase } from './lib/MongoDatabase'; +import constants from './constants' +import { Globals } from './globals' /** * @name exports * @static @@ -15,9 +19,29 @@ export default async function main() { // Build our server logger.info('Initializing REMS Administrator'); - const app = initialize(config).registerService(remsService); + const { server: serverConfig, database: databaseConfig } = config; - const { server: serverConfig } = config; + // Setup the database + var dbClient: Database; + switch (databaseConfig.selected) { + case constants.TINGO_DB: + dbClient = new TingoDatabase(databaseConfig.tingoConfig); + break; + case constants.MONGO_DB: + default: + dbClient = new MongoDatabase(databaseConfig.mongoConfig); + } + try { + await dbClient.connect(); + } catch (dbErr: any) { + console.error(dbErr.message); + console.error(); + process.exit(1); + } + Globals.databaseClient = dbClient.client; + Globals.database = dbClient.database; + + const app = initialize(config).registerService(remsService); // Start the application app.listen(serverConfig, () => { From 1b1c7a2bc064070bb82bf672bc3af0281c53942e Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 14 Dec 2022 15:46:33 -0500 Subject: [PATCH 18/83] Initial FHIR server support. This currently breaks the CDS Hooks server. --- env.json | 20 ++ package.json | 1 + src/config.ts | 87 +++++++++ src/constants.ts | 118 ++++++++++++ src/fhir/utilities.ts | 172 ++++++++++++++++++ src/lib/TingoDatabase.ts | 4 + src/main.ts | 6 + src/server.ts | 27 ++- src/services/library.service.ts | 38 ++++ src/services/patient.service.ts | 38 ++++ src/services/questionnaire.service.ts | 38 ++++ src/services/questionnaireresponse.service.ts | 38 ++++ src/services/valueset.service.ts | 38 ++++ 13 files changed, 620 insertions(+), 5 deletions(-) create mode 100644 src/fhir/utilities.ts create mode 100644 src/services/library.service.ts create mode 100644 src/services/patient.service.ts create mode 100644 src/services/questionnaire.service.ts create mode 100644 src/services/questionnaireresponse.service.ts create mode 100644 src/services/valueset.service.ts diff --git a/env.json b/env.json index f99929da..ded511b2 100644 --- a/env.json +++ b/env.json @@ -10,5 +10,25 @@ "development": "fhir-development", "default": "fhir", "required": true + }, + "WHITELIST": { + "type": "string", + "default": "http://localhost" + }, + "LOGGING_LEVEL": { + "type": "string", + "default": "debug" + }, + "SERVER_PORT": { + "type": "number", + "default": 8090 + }, + "RESOURCE_SERVER": { + "type": "string", + "default": "http://localhost:8090" + }, + "AUTH_SERVER_URI": { + "type": "string", + "default": "http://localhost:8090" } } diff --git a/package.json b/package.json index 641cb30f..cbbd3769 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ ] }, "dependencies": { + "@projecttacoma/node-fhir-server-core": "^2.2.8", "@types/fhir": "^0.0.35", "body-parser": "^1.19.0", "conventional-changelog-cli": "^2.0.34", diff --git a/src/config.ts b/src/config.ts index e06b683a..40dc28ce 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,5 +1,16 @@ +const { VERSIONS } = require('@projecttacoma/node-fhir-server-core').constants; const env = require('var'); + +// Set up whitelist +let whitelist_env = (env.WHITELIST && env.WHITELIST.split(',').map((host: string) => host.trim())) || false; + +// If no whitelist is present, disable cors +// If it's length is 1, set it to a string, so * works +// If there are multiple, keep them as an array +let whitelist = whitelist_env && whitelist_env.length === 1 ? whitelist_env[0] : whitelist_env; + + export default { server: { port: 8090, @@ -11,6 +22,9 @@ export default { logging: { level: 'info' }, + general: { + resourcePath: 'CDS-Library/CRD-DTR' + }, database: { selected: 'tingo', tingoConfig: { @@ -26,5 +40,78 @@ export default { useNewUrlParser: true, }, }, + }, + fhirServerConfig: { + auth: { + // This servers URI + resourceServer: env.RESOURCE_SERVER, + // + // if you use this strategy, you need to add the corresponding env vars to docker-compose + // + // strategy: { + // name: 'bearer', + // useSession: false, + // service: './src/strategies/bearer.strategy.js' + // }, + }, + server: { + // support various ENV that uses PORT vs SERVER_PORT + port: env.PORT || env.SERVER_PORT, + // allow Access-Control-Allow-Origin + corsOptions: { + maxAge: 86400, + origin: whitelist, + }, + }, + logging: { + level: env.LOGGING_LEVEL, + }, + // + // If you want to set up conformance statement with security enabled + // Uncomment the following block + // + security: [ + { + url: 'authorize', + valueUri: `${env.AUTH_SERVER_URI}/authorize`, + }, + { + url: 'token', + valueUri: `${env.AUTH_SERVER_URI}/token`, + }, + // optional - registration + ], + // + // Add any profiles you want to support. Each profile can support multiple versions + // if supported by core. To support multiple versions, just add the versions to the array. + // + // Example: + // Account: { + // service: './src/services/account/account.service.js', + // versions: [ VERSIONS['4_0_0'], VERSIONS['3_0_1'], VERSIONS['1_0_2'] ] + // }, + // + profiles: { + Patient: { + service: './src/services/patient.service.ts', + versions: [VERSIONS['4_0_0']], + }, + library: { + service: './src/services/library.service.ts', + versions: [VERSIONS['4_0_0']], + }, + questionnaire: { + service: './src/services/questionnaire.service.ts', + versions: [VERSIONS['4_0_0']], + }, + questionnaireresponse: { + service: './src/services/questionnaireresponse.service.ts', + versions: [VERSIONS['4_0_0']], + }, + valueset: { + service: './src/services/valueset.service.ts', + versions: [VERSIONS['4_0_0']], + }, + }, } }; diff --git a/src/constants.ts b/src/constants.ts index 9ec5e808..8d69055a 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,4 +2,122 @@ export default { MONGO_DB: 'mongo', TINGO_DB: 'tingo', + COLLECTION: { + ACCOUNT: 'Account', + ACTIVITYDEFINITION: 'ActivityDefinition', + ADVERSEEVENT: 'AdverseEvent', + ALLERGYINTOLERANCE: 'AllergyIntolerance', + APPOINTMENT: 'Appointment', + APPOINTMENTRESPONSE: 'AppointmentResponse', + AUDITEVENT: 'AuditEvent', + BASIC: 'Basic', + BINARY: 'Binary', + BODYSITE: 'BodySite', + BUNDLE: 'Bundle', + CAPABILITYSTATEMENT: 'CapabilityStatement', + CAREPLAN: 'CarePlan', + CARETEAM: 'CareTeam', + CHARGEITEM: 'ChargeItem', + CLAIM: 'Claim', + CLAIMRESPONSE: 'ClaimResponse', + CLINICALIMPRESSION: 'ClinicalImpression', + CODESYSTEM: 'CodeSystem', + COMMUNICATION: 'Communication', + COMMUNICATIONREQUEST: 'CommunicationRequest', + COMPARTMENTDEFINITION: 'CompartmentDefinition', + COMPOSITION: 'Composition', + CONCEPTMAP: 'ConceptMap', + CONDITION: 'Condition', + CONSENT: 'Consent', + CONTRACT: 'Contract', + COVERAGE: 'Coverage', + DATAELEMENT: 'DataElement', + DETECTEDISSUE: 'DetectedIssue', + DEVICE: 'Device', + DEVICECOMPONENT: 'DeviceComponent', + DEVICEMETRIC: 'DeviceMetric', + DEVICEREQUEST: 'DeviceRequest', + DEVICEUSESTATEMENT: 'DeviceUseStatement', + DIAGNOSTICREPORT: 'DiagnosticReport', + DOCUMENTMANIFEST: 'DocumentManifest', + DOCUMENTREFERENCE: 'DocumentReference', + ELIGIBILITYREQUEST: 'EligibilityRequest', + ELIGIBILITYRESPONSE: 'EligibilityResponse', + ENCOUNTER: 'Encounter', + ENDPOINT: 'Endpoint', + ENROLLMENTREQUEST: 'EnrollmentRequest', + ENROLLMENTRESPONSE: 'EnrollmentResponse', + EPISODEOFCARE: 'EpisodeOfCare', + EXPANSIONPROFILE: 'ExpansionProfile', + EXPLANATIONOFBENEFIT: 'ExplanationOfBenefit', + FAMILYMEMBERHISTORY: 'FamilyMemberHistory', + FLAG: 'Flag', + GOAL: 'Goal', + GRAPHDEFINITION: 'GraphDefinition', + GROUP: 'Group', + GUIDANCERESPONSE: 'GuidanceResponse', + HEALTHCARESERVICE: 'HealthcareService', + IMAGINGMANIFEST: 'ImagingManifest', + IMAGINGSTUDY: 'ImagingStudy', + IMMUNIZATION: 'Immunization', + IMMUNIZATIONRECOMMENDATION: 'ImmunizationRecommendation', + IMPLEMENTATIONGUIDE: 'ImplementationGuide', + LIBRARY: 'Library', + LINKAGE: 'Linkage', + LIST: 'List', + LOCATION: 'Location', + MEASURE: 'Measure', + MEASUREREPORT: 'MeasureReport', + MEDIA: 'Media', + MEDICATION: 'Medication', + MEDICATIONADMINISTRATION: 'MedicationAdministration', + MEDICATIONDISPENSE: 'MedicationDispense', + MEDICATIONREQUEST: 'MedicationRequest', + MEDICATIONSTATEMENT: 'MedicationStatement', + MESSAGEDEFINITION: 'MessageDefinition', + MESSAGEHEADER: 'MessageHeader', + NAMINGSYSTEM: 'NamingSystem', + NUTRITIONORDER: 'NutritionOrder', + OBSERVATION: 'Observation', + OPERATIONDEFINITION: 'OperationDefinition', + ORGANIZATION: 'Organization', + PATIENT: 'Patient', + PAYMENTNOTICE: 'PaymentNotice', + PAYMENTRECONCILIATION: 'PaymentReconciliation', + PERSON: 'Person', + PLANDEFINITION: 'PlanDefinition', + PRACTITIONER: 'Practitioner', + PRACTITIONERROLE: 'PractitionerRole', + PROCEDURE: 'Procedure', + PROCEDUREREQUEST: 'ProcedureRequest', + PROCESSREQUEST: 'ProcessRequest', + PROCESSRESPONSE: 'ProcessResponse', + PROVENANCE: 'Provenance', + QUESTIONNAIRE: 'Questionnaire', + QUESTIONNAIRERESPONSE: 'QuestionnaireResponse', + REFERRALREQUEST: 'ReferralRequest', + RELATEDPERSON: 'RelatedPerson', + REQUESTGROUP: 'RequestGroup', + RESEARCHSTUDY: 'ResearchStudy', + RESEARCHSUBJECT: 'ResearchSubject', + RISKASSESSMENT: 'RiskAssessment', + SCHEDULE: 'Schedule', + SEARCHPARAMETER: 'SearchParameter', + SEQUENCE: 'Sequence', + SERVICEDEFINITION: 'ServiceDefinition', + SLOT: 'Slot', + SPECIMEN: 'Specimen', + STRUCTUREDEFINITION: 'StructureDefinition', + STRUCTUREMAP: 'StructureMap', + SUBSCRIPTION: 'Subscription', + SUBSTANCE: 'Substance', + SUPPLYDELIVERY: 'SupplyDelivery', + SUPPLYREQUEST: 'SupplyRequest', + TASK: 'Task', + TESTREPORT: 'TestReport', + TESTSCRIPT: 'TestScript', + VALUESET: 'ValueSet', + VISIONPRESCRIPTION: 'VisionPrescription', + CLIENT: 'Client', + }, } diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts new file mode 100644 index 00000000..041330bc --- /dev/null +++ b/src/fhir/utilities.ts @@ -0,0 +1,172 @@ + +const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); +const moment = require('moment-timezone'); + +import constants from '../constants'; +import { Globals } from '../globals'; +import * as path from 'path'; +import * as fs from 'fs'; + +const re = /(?:\.([^.]+))?$/; + +export class FhirUtilities { + static getLibrary(baseVersion: string) { + return resolveSchema(baseVersion, 'Library'); + }; + + static getPatient(baseVersion: string) { + return resolveSchema(baseVersion, 'Patient'); + }; + + static getQuestionnaire(baseVersion: string) { + return resolveSchema(baseVersion, 'Questionnaire'); + }; + + static getQuestionnaireResponse(baseVersion: string) { + return resolveSchema(baseVersion, 'QuestionnaireResponse'); + }; + + static getValueSet(baseVersion: string) { + return resolveSchema(baseVersion, 'ValueSet'); + }; + + static getMeta = (baseVersion: string) => { + return resolveSchema(baseVersion, 'Meta'); + }; + + static async store(resource: any, resolve: any, reject: any, baseVersion: string = "4_0_0") { + + let db = Globals.database; + + // If no resource ID was provided, generate one. + let id = ''; + if (!resource.id) { + // If no resource ID was provided, generate one. + id = self.crypto.randomUUID(); + } else { + id = resource.id + } + console.log(" FhirUtilities::store: " + resource.resourceType + " -- " + id); + + var collectionString: string = ""; + var historyCollectionString: string = ""; + + // Build the strings to connect to the collections + switch (resource.resourceType) { + case "Library": + collectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}_History`; + break; + case "Patient": + collectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}_History`; + break + case "Questionnaire": + collectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}_History`; + break; + case "QuestionnaireResponse": + collectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}_History`; + break; + case "ValueSet": + collectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}_History`; + break; + }; + + let Resource = resolveSchema(baseVersion, resource.resourceType); + let fhirResource = new Resource(resource); + + // Create the resource's metadata + let Meta = FhirUtilities.getMeta(baseVersion); + fhirResource.meta = new Meta({ + versionId: '1', + lastUpdated: moment.utc().format('YYYY-MM-DDTHH:mm:ssZ'), + }); + + if (collectionString === "") { + return reject(" Unsupported FHIR Resource Type"); + } + let collection = db.collection(collectionString); + + // Create the document to be inserted into teh database + let doc = JSON.parse(JSON.stringify(fhirResource.toJSON())); + Object.assign(doc, { id: id }); + + // Create a clone of the object without the _id parameter before assigning a value to + // the _id parameter in the original document + let history_doc = Object.assign({}, doc); + Object.assign(doc, { _id: id }); + + // Insert our resource record + collection.insert(doc, (err: any) => { + if (err) { + console.log(' Error with %s.create: ', resource.resourceType, err.message); + return reject(err); + } else { + console.log(" Successfully added " + resource.resourceType + " -- " + id); + } + + // Save the resource to history + let history_collection = db.collection(historyCollectionString); + + // Insert our patient record to history but don't assign _id + return history_collection.insert(history_doc, (err2: any) => { + if (err2) { + console.log(' Error with %sHistory.create: ', resource.resourceType, err2.message); + return reject(err2); + } + return resolve({ id: doc.id, resource_version: doc.meta.versionId }); + }); + }); + } + + + static loadResources(resourcePath: string) { + var process = require("process"); + + // Loop through all the files in the temp directory + fs.readdir(resourcePath, function (err: any, files: any) { + if (err) { + console.error("Could not list the directory.", err); + process.exit(1); + } + + files.forEach(function (file: any, index: any) { + // Make one pass and make the file complete + var filePath = path.join(resourcePath, file); + + fs.stat(filePath, function (error: any, stat: any) { + if (error) { + console.error("Error getting file statistics.", error); + return; + } + + if (stat.isFile()) { + var extension = re.exec(filePath); + if (extension) { + if (extension[1].toLowerCase() === 'json') { + if (file !== 'TopicMetadata.json') { + console.log("'%s' is a JSON Resource file.", filePath); + fs.readFile(filePath, "utf8", (err: any, jsonString: string) => { + if (err) { + console.error("Failed to read file:", err); + return; + } + const resource = JSON.parse(jsonString); + FhirUtilities.store(resource, function() {}, function() {}); + }) + } + } + } + } + else if (stat.isDirectory()) { + FhirUtilities.loadResources(filePath); + } + }); + }); + }); + } + +} \ No newline at end of file diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts index 698786b9..438fd7e8 100644 --- a/src/lib/TingoDatabase.ts +++ b/src/lib/TingoDatabase.ts @@ -1,4 +1,5 @@ import { Database } from "./Database"; +import * as fs from 'fs'; const tingoDb = require('tingodb')(); export class TingoDatabase extends Database { @@ -11,6 +12,9 @@ export class TingoDatabase extends Database { connect = () => new Promise((resolve, reject) => { + // create the database folder + fs.mkdirSync(this.location, { recursive: true }) + // Connect to tingo console.log("TingoDatabase connect: " + this.location); this.database = new tingoDb.Db(this.location, {}) diff --git a/src/main.ts b/src/main.ts index 5c148511..4256c32b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,6 +7,8 @@ import { TingoDatabase } from './lib/TingoDatabase'; import { MongoDatabase } from './lib/MongoDatabase'; import constants from './constants' import { Globals } from './globals' +import { FhirUtilities } from './fhir/utilities'; + /** * @name exports * @static @@ -41,6 +43,10 @@ export default async function main() { Globals.databaseClient = dbClient.client; Globals.database = dbClient.database; + // load the database with the default resources + console.log("Loading FHIR Resources from: " + config.general.resourcePath); + FhirUtilities.loadResources(config.general.resourcePath); + const app = initialize(config).registerService(remsService); // Start the application diff --git a/src/server.ts b/src/server.ts index cc128900..28cc640a 100644 --- a/src/server.ts +++ b/src/server.ts @@ -6,11 +6,23 @@ import morgan from 'morgan'; import _ from 'lodash'; import Hook from './hooks/Hook'; +const { Server } = require('@projecttacoma/node-fhir-server-core'); + const logger = container.get('application'); const initialize = (config: any) => { const logLevel = _.get(config, 'logging.level'); - return new REMSServer().configureLogstream(logLevel).configureMiddleware(); + const app = express(); + //return new REMSServer(config.fhirServerConfig, app).configureLogstream(logLevel).configureMiddleware(); + return new REMSServer(config.fhirServerConfig, app) + .configureLogstream(logLevel) + .configureMiddleware() + .configureSession() + .configureHelmet() + .configurePassport() + .setPublicDirectory() + .setProfileRoutes() + .setErrorRoutes(); }; /** @@ -19,7 +31,7 @@ const initialize = (config: any) => { * @summary Main Server for the application * @class Server */ -class REMSServer { +class REMSServer extends Server { app: express.Application; services: Hook[]; /** @@ -27,8 +39,10 @@ class REMSServer { * @description Setup defaults for the server instance */ - constructor() { - this.app = express(); + constructor(config: any, app: any) { + super(config, app); + //this.app = express(); + this.app = app; this.services = []; return this; } @@ -38,6 +52,7 @@ class REMSServer { * @description Enable all the standard middleware */ configureMiddleware() { + super.configureMiddleware(); this.app.set('showStackError', true); this.app.set('jsonp callback', true); this.app.use(bodyParser.urlencoded({ limit: '50mb', extended: true })); @@ -54,6 +69,7 @@ class REMSServer { * @description Enable streaming logs via morgan */ configureLogstream({ log, level = 'info' }: { log?: any; level?: string } = {}) { + super.configureLogstream this.app.use( log ? log @@ -89,7 +105,8 @@ class REMSServer { this.app.get('/', (req: any, res: { send: (arg0: string) => any }) => res.send('Welcome to the REMS Administrator') ); - return this.app.listen(port, callback); + //return this.app.listen(port, callback); + return super.listen(port, callback); } } diff --git a/src/services/library.service.ts b/src/services/library.service.ts new file mode 100644 index 00000000..fe08d894 --- /dev/null +++ b/src/services/library.service.ts @@ -0,0 +1,38 @@ +const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); +const moment = require('moment-timezone'); + +import constants from '../constants' +import { Globals } from '../globals' +import { FhirUtilities } from '../fhir/utilities'; + + +module.exports.searchById = (args: any) => + new Promise((resolve, reject) => { + let { base_version, id } = args; + console.log('Library >>> searchById: -- ' + id); + + let Library = FhirUtilities.getLibrary(base_version); + + // Grab an instance of our DB and collection + let db = Globals.database; + let collection = db.collection(`${constants.COLLECTION.LIBRARY}_${base_version}`); + // Query our collection for this observation + collection.findOne({ id: id.toString() }, (err: any, library: any) => { + if (err) { + console.log('Error with Library.searchById: ', err); + return reject(err); + } + if (library) { + resolve(new Library(library)); + } + resolve(""); + }); + }); + +module.exports.create = ( args: any, req: any ) => + new Promise((resolve, reject) => { + console.log('Library >>> create'); + let resource = req.req.body; + let { base_version } = args; + FhirUtilities.store(resource, resolve, reject, base_version); + }); diff --git a/src/services/patient.service.ts b/src/services/patient.service.ts new file mode 100644 index 00000000..c6f4be6c --- /dev/null +++ b/src/services/patient.service.ts @@ -0,0 +1,38 @@ +const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); +const moment = require('moment-timezone'); + +import constants from '../constants' +import { Globals } from '../globals' +import { FhirUtilities } from '../fhir/utilities'; + + +module.exports.searchById = (args: any) => + new Promise((resolve, reject) => { + let { base_version, id } = args; + console.log('Patient >>> searchById -- ' + id); + + let Patient = FhirUtilities.getPatient(base_version); + + // Grab an instance of our DB and collection + let db = Globals.database; + let collection = db.collection(`${constants.COLLECTION.PATIENT}_${base_version}`); + // Query our collection for this observation + collection.findOne({ id: id.toString() }, (err: any, patient: any) => { + if (err) { + console.log('Error with Patient.searchById: ', err); + return reject(err); + } + if (patient) { + resolve(new Patient(patient)); + } + resolve(""); + }); + }); + +module.exports.create = ( args: any, req: any ) => + new Promise((resolve, reject) => { + console.log('Patient >>> create'); + let resource = req.req.body; + let { base_version } = args; + FhirUtilities.store(resource, resolve, reject, base_version); + }); diff --git a/src/services/questionnaire.service.ts b/src/services/questionnaire.service.ts new file mode 100644 index 00000000..43fb542f --- /dev/null +++ b/src/services/questionnaire.service.ts @@ -0,0 +1,38 @@ +const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); +const moment = require('moment-timezone'); + +import constants from '../constants' +import { Globals } from '../globals' +import { FhirUtilities } from '../fhir/utilities'; + + +module.exports.searchById = (args: any) => + new Promise((resolve, reject) => { + let { base_version, id } = args; + console.log('Questionnaire >>> searchById: -- ' + id); + + let Questionnaire = FhirUtilities.getQuestionnaire(base_version); + + // Grab an instance of our DB and collection + let db = Globals.database; + let collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRE}_${base_version}`); + // Query our collection for this observation + collection.findOne({ id: id.toString() }, (err: any, questionnaire: any) => { + if (err) { + console.log('Error with Questionnaire.searchById: ', err); + return reject(err); + } + if (questionnaire) { + resolve(new Questionnaire(questionnaire)); + } + resolve(""); + }); + }); + +module.exports.create = (args: any, req: any ) => + new Promise((resolve, reject) => { + console.log('Questionnaire >>> create'); + let resource = req.req.body; + let { base_version } = args; + FhirUtilities.store(resource, resolve, reject, base_version); + }); diff --git a/src/services/questionnaireresponse.service.ts b/src/services/questionnaireresponse.service.ts new file mode 100644 index 00000000..b795ecb2 --- /dev/null +++ b/src/services/questionnaireresponse.service.ts @@ -0,0 +1,38 @@ +const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); +const moment = require('moment-timezone'); + +import constants from '../constants' +import { Globals } from '../globals' +import { FhirUtilities } from '../fhir/utilities'; + + +module.exports.searchById = (args: any) => + new Promise((resolve, reject) => { + let { base_version, id } = args; + console.log('QuestionnaireResponse >>> searchById: -- ' + id); + + let QuestionnaireResponse = FhirUtilities.getQuestionnaireResponse(base_version); + + // Grab an instance of our DB and collection + let db = Globals.database; + let collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${base_version}`); + // Query our collection for this observation + collection.findOne({ id: id.toString() }, (err: any, questionnaireResponse: any) => { + if (err) { + console.log('Error with QuestionnaireResponse.searchById: ', err); + return reject(err); + } + if (questionnaireResponse) { + resolve(new QuestionnaireResponse(questionnaireResponse)); + } + resolve(""); + }); + }); + +module.exports.create = (args: any, req: any ) => + new Promise((resolve, reject) => { + console.log('QuestionnaireResponse >>> create'); + let resource = req.req.body; + let { base_version } = args; + FhirUtilities.store(resource, resolve, reject, base_version); + }); diff --git a/src/services/valueset.service.ts b/src/services/valueset.service.ts new file mode 100644 index 00000000..aa041657 --- /dev/null +++ b/src/services/valueset.service.ts @@ -0,0 +1,38 @@ +const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); +const moment = require('moment-timezone'); + +import constants from '../constants' +import { Globals } from '../globals' +import { FhirUtilities } from '../fhir/utilities'; + + +module.exports.searchById = (args: any) => + new Promise((resolve, reject) => { + let { base_version, id } = args; + console.log('ValueSet >>> searchById: -- ' + id); + + let ValueSet = FhirUtilities.getValueSet(base_version); + + // Grab an instance of our DB and collection + let db = Globals.database; + let collection = db.collection(`${constants.COLLECTION.VALUESET}_${base_version}`); + // Query our collection for this observation + collection.findOne({ id: id.toString() }, (err: any, valueSet: any) => { + if (err) { + console.log('Error with ValueSet.searchById: ', err); + return reject(err); + } + if (valueSet) { + resolve(new ValueSet(valueSet)); + } + resolve(""); + }); + }); + +module.exports.create = (args: any, req: any ) => + new Promise((resolve, reject) => { + console.log('ValuSet >>> create'); + let resource = req.req.body; + let { base_version } = args; + FhirUtilities.store(resource, resolve, reject, base_version); + }); From d3365c287c41ca28aee8df863ed20ccb0f57ea2e Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 22 Dec 2022 13:05:57 -0500 Subject: [PATCH 19/83] fixed failing routes --- docker-compose-dev.yml | 64 +++++++++++++++++++++--------------------- docker-sync.yml | 6 ++-- src/server.ts | 13 ++++----- 3 files changed, 40 insertions(+), 43 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index bca515ac..475948e6 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -40,28 +40,28 @@ services: - "host.docker.internal:host-gateway" # Create crd container - crd: - # Name of our service - build: - context: ../CRD - dockerfile: Dockerfile.dev - container_name: rems_dev_crd - ports: - # Port binding to host from docker container - - "8090:8090" # Bind port 3000 of host to 3000 of container - - "8091:8091" - environment: - VSAC_API_KEY: ${VSAC_API_KEY} - volumes: - - rems_dev_crd-sync:/CRD:nocopy # nocopy is important - - rems_dev_crd-logs:/CRD/logs - - rems_dev_crd-gradle:/CRD/.gradle - - rems_dev_crd-server-gradle:/CRD/server/.gradle - - rems_dev_crd-server-build:/CRD/server/build - - rems_dev_crd-server-bin:/CRD/server/bin - - rems_dev_crd-server-ValueSetCache:/CRD/server/ValueSetCache - - rems_dev_crd-operations-build:/CRD/operations/build - - rems_dev_crd-resources-build:/CRD/resources/build + # crd: + # # Name of our service + # build: + # context: ../CRD + # dockerfile: Dockerfile.dev + # container_name: rems_dev_crd + # ports: + # # Port binding to host from docker container + # - "8090:8090" # Bind port 3000 of host to 3000 of container + # - "8091:8091" + # environment: + # VSAC_API_KEY: ${VSAC_API_KEY} + # volumes: + # - rems_dev_crd-sync:/CRD:nocopy # nocopy is important + # - rems_dev_crd-logs:/CRD/logs + # - rems_dev_crd-gradle:/CRD/.gradle + # - rems_dev_crd-server-gradle:/CRD/server/.gradle + # - rems_dev_crd-server-build:/CRD/server/build + # - rems_dev_crd-server-bin:/CRD/server/bin + # - rems_dev_crd-server-ValueSetCache:/CRD/server/ValueSetCache + # - rems_dev_crd-operations-build:/CRD/operations/build + # - rems_dev_crd-resources-build:/CRD/resources/build # Create crd request generator container crd-request-generator: @@ -160,8 +160,8 @@ services: volumes: rems_dev_test-ehr-sync: external: true - rems_dev_crd-sync: - external: true + # rems_dev_crd-sync: + # external: true rems_dev_crd-request-generator-sync: external: true rems_dev_dtr-sync: @@ -177,14 +177,14 @@ volumes: rems_dev_test-ehr-build: rems_dev_test-ehr-target: rems_dev_test-ehr-logs: - rems_dev_crd-logs: - rems_dev_crd-gradle: - rems_dev_crd-server-gradle: - rems_dev_crd-server-build: - rems_dev_crd-server-bin: - rems_dev_crd-server-ValueSetCache: - rems_dev_crd-operations-build: - rems_dev_crd-resources-build: + # rems_dev_crd-logs: + # rems_dev_crd-gradle: + # rems_dev_crd-server-gradle: + # rems_dev_crd-server-build: + # rems_dev_crd-server-bin: + # rems_dev_crd-server-ValueSetCache: + # rems_dev_crd-operations-build: + # rems_dev_crd-resources-build: rems_dev_crd-request-generator-nodeModules: rems_dev_crd-request-generator-databaseData: rems_dev_crd-request-generator-build: diff --git a/docker-sync.yml b/docker-sync.yml index 151bc52f..0e24cbfa 100644 --- a/docker-sync.yml +++ b/docker-sync.yml @@ -6,9 +6,9 @@ syncs: src: ../test-ehr sync_excludes: ['.gradle', 'bin', 'build', 'target', 'logs'] - rems_dev_crd-sync: - src: '../CRD' - sync_excludes: ['logs', '.gradle', 'server/.gradle', 'server/bin', 'server/build', 'server/ValueSetCache', 'operations/build', 'resources/build'] + # rems_dev_crd-sync: + # src: '../CRD' + # sync_excludes: ['logs', '.gradle', 'server/.gradle', 'server/bin', 'server/build', 'server/ValueSetCache', 'operations/build', 'resources/build'] rems_dev_crd-request-generator-sync: src: '../crd-request-generator' diff --git a/src/server.ts b/src/server.ts index 28cc640a..b246acd1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -12,17 +12,16 @@ const logger = container.get('application'); const initialize = (config: any) => { const logLevel = _.get(config, 'logging.level'); - const app = express(); + // const app = express(); //return new REMSServer(config.fhirServerConfig, app).configureLogstream(logLevel).configureMiddleware(); - return new REMSServer(config.fhirServerConfig, app) + return new REMSServer(config.fhirServerConfig) .configureLogstream(logLevel) .configureMiddleware() .configureSession() .configureHelmet() .configurePassport() .setPublicDirectory() - .setProfileRoutes() - .setErrorRoutes(); + .setProfileRoutes(); }; /** @@ -32,17 +31,15 @@ const initialize = (config: any) => { * @class Server */ class REMSServer extends Server { - app: express.Application; services: Hook[]; /** * @method constructor * @description Setup defaults for the server instance */ - constructor(config: any, app: any) { - super(config, app); + constructor(config: any) { + super(config); //this.app = express(); - this.app = app; this.services = []; return this; } From 0528f27670f55de0fbf05530986ac7c2af250993 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Fri, 23 Dec 2022 10:47:42 -0500 Subject: [PATCH 20/83] Cleanup service registration and fix unit tests. --- src/fhir/utilities.ts | 1 + src/main.ts | 4 +--- src/server.test.ts | 11 ++++++----- src/server.ts | 37 +++++++++++++++++++++---------------- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 041330bc..34d1aff8 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -124,6 +124,7 @@ export class FhirUtilities { static loadResources(resourcePath: string) { + console.log("Loading FHIR Resources from: " + resourcePath); var process = require("process"); // Loop through all the files in the temp directory diff --git a/src/main.ts b/src/main.ts index 4256c32b..943a3f64 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,6 @@ import { initialize } from './server'; import container from './lib/winston'; import config from './config'; -import remsService from './hooks/rems.hook'; import { Database } from './lib/Database'; import { TingoDatabase } from './lib/TingoDatabase'; import { MongoDatabase } from './lib/MongoDatabase'; @@ -44,10 +43,9 @@ export default async function main() { Globals.database = dbClient.database; // load the database with the default resources - console.log("Loading FHIR Resources from: " + config.general.resourcePath); FhirUtilities.loadResources(config.general.resourcePath); - const app = initialize(config).registerService(remsService); + const app = initialize(config); // Start the application app.listen(serverConfig, () => { diff --git a/src/server.test.ts b/src/server.test.ts index 5ef94386..5d5d2747 100644 --- a/src/server.test.ts +++ b/src/server.test.ts @@ -2,6 +2,7 @@ import bodyParser from 'body-parser'; import morgan from 'morgan'; import { initialize, REMSServer } from './server'; import config from './config'; +import express from 'express'; describe('REMSServer class', () => { let server: REMSServer; @@ -28,7 +29,7 @@ describe('REMSServer class', () => { return mock; }); - server = new REMSServer(); + server = new REMSServer(config.fhirServerConfig); }); afterEach(() => { @@ -47,13 +48,13 @@ describe('REMSServer class', () => { server.configureMiddleware(); - expect(set).toHaveBeenCalledTimes(5); + expect(set).toHaveBeenCalledTimes(6); expect(set.mock.calls[0][0]).toBe('showStackError'); expect(set.mock.calls[0][1]).toBe(true); - expect(set.mock.calls[1][0]).toBe('jsonp callback'); - expect(set.mock.calls[1][1]).toBe(true); + expect(set.mock.calls[5][0]).toBe('jsonp callback'); + expect(set.mock.calls[5][1]).toBe(true); - expect(use).toHaveBeenCalledTimes(3); + expect(use).toHaveBeenCalledTimes(8); }); test('method: configureLogstream', () => { diff --git a/src/server.ts b/src/server.ts index b246acd1..913175b2 100644 --- a/src/server.ts +++ b/src/server.ts @@ -5,6 +5,7 @@ import container from './lib/winston'; import morgan from 'morgan'; import _ from 'lodash'; import Hook from './hooks/Hook'; +import remsService from './hooks/rems.hook'; const { Server } = require('@projecttacoma/node-fhir-server-core'); @@ -12,16 +13,15 @@ const logger = container.get('application'); const initialize = (config: any) => { const logLevel = _.get(config, 'logging.level'); - // const app = express(); - //return new REMSServer(config.fhirServerConfig, app).configureLogstream(logLevel).configureMiddleware(); return new REMSServer(config.fhirServerConfig) - .configureLogstream(logLevel) .configureMiddleware() .configureSession() .configureHelmet() .configurePassport() .setPublicDirectory() - .setProfileRoutes(); + .setProfileRoutes() + .registerCdsHooks(config.server) + .setErrorRoutes(); }; /** @@ -39,7 +39,6 @@ class REMSServer extends Server { constructor(config: any) { super(config); - //this.app = express(); this.services = []; return this; } @@ -80,30 +79,36 @@ class REMSServer extends Server { registerService({ definition, handler }: { definition: any; handler: any }) { this.services.push(definition); - this.app.post(`/cds-services/${definition.id}`, handler); + this.app.post(`${this.cdsHooksEndpoint}/${definition.id}`, handler); //TODO: remove this after request generator is updated to a new order-sign prefetch // add a post endpoint to match the old CRD server - this.app.post(`/r4/cds-services/${definition.hook}-crd`, handler); + this.app.post(`/r4${this.cdsHooksEndpoint}/${definition.hook}-crd`, handler); return this; } - /** - * @method listen - * @description Start listening on the configured port - * @param {number} port - Defualt port to listen on - * @param {function} [callback] - Optional callback for listen - */ - listen({ port, discoveryEndpoint = '/cds-services' }: any, callback: any) { + registerCdsHooks({ discoveryEndpoint = '/cds-services' }: any) { + this.cdsHooksEndpoint = discoveryEndpoint; + this.registerService(remsService); + this.app.get(discoveryEndpoint, (req: any, res: { json: (arg0: { services: any }) => any }) => res.json({ services: this.services }) ); this.app.get('/', (req: any, res: { send: (arg0: string) => any }) => res.send('Welcome to the REMS Administrator') ); - //return this.app.listen(port, callback); - return super.listen(port, callback); + return this; + } + + /** + * @method listen + * @description Start listening on the configured port + * @param {number} port - Defualt port to listen on + * @param {function} [callback] - Optional callback for listen + */ + listen({ port }: any, callback: any) { + return this.app.listen(port, callback); } } From 011d72e2dc22f4b36d2c0ff55782baace1c50ff1 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Tue, 3 Jan 2023 16:49:38 -0500 Subject: [PATCH 21/83] Fix many of the lint errors and warnings. --- package.json | 1 + src/config.ts | 4 +- src/constants.ts | 2 +- src/fhir/utilities.ts | 83 ++++++++++--------- src/globals.ts | 4 +- src/lib/Database.ts | 8 +- src/lib/MongoDatabase.ts | 14 ++-- src/lib/TingoDatabase.ts | 12 +-- src/lib/winston.test.ts | 1 - src/main.ts | 6 +- src/server.test.ts | 3 - src/server.ts | 6 +- src/services/library.service.ts | 21 ++--- src/services/patient.service.ts | 21 ++--- src/services/questionnaire.service.ts | 21 ++--- src/services/questionnaireresponse.service.ts | 21 ++--- src/services/valueset.service.ts | 21 ++--- 17 files changed, 115 insertions(+), 134 deletions(-) diff --git a/package.json b/package.json index cbbd3769..dafb56ff 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "express": "^4.17.1", "lodash": "^4.17.19", "moment": "^2.24.0", + "moment-timezone": "^0.5.40", "mongodb": "^4.12.1", "morgan": "^1.9.1", "tingodb": "^0.6.1", diff --git a/src/config.ts b/src/config.ts index 40dc28ce..d8409603 100644 --- a/src/config.ts +++ b/src/config.ts @@ -3,12 +3,12 @@ const env = require('var'); // Set up whitelist -let whitelist_env = (env.WHITELIST && env.WHITELIST.split(',').map((host: string) => host.trim())) || false; +const whitelist_env = (env.WHITELIST && env.WHITELIST.split(',').map((host: string) => host.trim())) || false; // If no whitelist is present, disable cors // If it's length is 1, set it to a string, so * works // If there are multiple, keep them as an array -let whitelist = whitelist_env && whitelist_env.length === 1 ? whitelist_env[0] : whitelist_env; +const whitelist = whitelist_env && whitelist_env.length === 1 ? whitelist_env[0] : whitelist_env; export default { diff --git a/src/constants.ts b/src/constants.ts index 8d69055a..b6ae330a 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -120,4 +120,4 @@ export default { VISIONPRESCRIPTION: 'VisionPrescription', CLIENT: 'Client', }, -} +}; diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 34d1aff8..ee8a90b4 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -1,42 +1,44 @@ const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -const moment = require('moment-timezone'); +import * as moment from 'moment'; +import 'moment-timezone'; import constants from '../constants'; import { Globals } from '../globals'; import * as path from 'path'; import * as fs from 'fs'; +import * as process from 'process'; const re = /(?:\.([^.]+))?$/; export class FhirUtilities { static getLibrary(baseVersion: string) { return resolveSchema(baseVersion, 'Library'); - }; + } static getPatient(baseVersion: string) { return resolveSchema(baseVersion, 'Patient'); - }; + } static getQuestionnaire(baseVersion: string) { return resolveSchema(baseVersion, 'Questionnaire'); - }; + } static getQuestionnaireResponse(baseVersion: string) { return resolveSchema(baseVersion, 'QuestionnaireResponse'); - }; + } static getValueSet(baseVersion: string) { return resolveSchema(baseVersion, 'ValueSet'); - }; + } static getMeta = (baseVersion: string) => { return resolveSchema(baseVersion, 'Meta'); }; - static async store(resource: any, resolve: any, reject: any, baseVersion: string = "4_0_0") { + static async store(resource: any, resolve: any, reject: any, baseVersion = '4_0_0') { - let db = Globals.database; + const db = Globals.database; // If no resource ID was provided, generate one. let id = ''; @@ -44,59 +46,59 @@ export class FhirUtilities { // If no resource ID was provided, generate one. id = self.crypto.randomUUID(); } else { - id = resource.id + id = resource.id; } - console.log(" FhirUtilities::store: " + resource.resourceType + " -- " + id); + console.log(' FhirUtilities::store: ' + resource.resourceType + ' -- ' + id); - var collectionString: string = ""; - var historyCollectionString: string = ""; + let collectionString = ''; + let historyCollectionString = ''; // Build the strings to connect to the collections switch (resource.resourceType) { - case "Library": + case 'Library': collectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}`; historyCollectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}_History`; break; - case "Patient": + case 'Patient': collectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}`; historyCollectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}_History`; - break - case "Questionnaire": + break; + case 'Questionnaire': collectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}`; historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}_History`; break; - case "QuestionnaireResponse": + case 'QuestionnaireResponse': collectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}`; historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}_History`; break; - case "ValueSet": + case 'ValueSet': collectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}`; historyCollectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}_History`; break; - }; + } - let Resource = resolveSchema(baseVersion, resource.resourceType); - let fhirResource = new Resource(resource); + const Resource = resolveSchema(baseVersion, resource.resourceType); + const fhirResource = new Resource(resource); // Create the resource's metadata - let Meta = FhirUtilities.getMeta(baseVersion); + const Meta = FhirUtilities.getMeta(baseVersion); fhirResource.meta = new Meta({ versionId: '1', lastUpdated: moment.utc().format('YYYY-MM-DDTHH:mm:ssZ'), }); - if (collectionString === "") { - return reject(" Unsupported FHIR Resource Type"); + if (collectionString === '') { + return reject(' Unsupported FHIR Resource Type'); } - let collection = db.collection(collectionString); + const collection = db.collection(collectionString); // Create the document to be inserted into teh database - let doc = JSON.parse(JSON.stringify(fhirResource.toJSON())); + const doc = JSON.parse(JSON.stringify(fhirResource.toJSON())); Object.assign(doc, { id: id }); // Create a clone of the object without the _id parameter before assigning a value to // the _id parameter in the original document - let history_doc = Object.assign({}, doc); + const history_doc = Object.assign({}, doc); Object.assign(doc, { _id: id }); // Insert our resource record @@ -105,11 +107,11 @@ export class FhirUtilities { console.log(' Error with %s.create: ', resource.resourceType, err.message); return reject(err); } else { - console.log(" Successfully added " + resource.resourceType + " -- " + id); + console.log(' Successfully added ' + resource.resourceType + ' -- ' + id); } // Save the resource to history - let history_collection = db.collection(historyCollectionString); + const history_collection = db.collection(historyCollectionString); // Insert our patient record to history but don't assign _id return history_collection.insert(history_doc, (err2: any) => { @@ -124,40 +126,39 @@ export class FhirUtilities { static loadResources(resourcePath: string) { - console.log("Loading FHIR Resources from: " + resourcePath); - var process = require("process"); + console.log('Loading FHIR Resources from: ' + resourcePath); // Loop through all the files in the temp directory fs.readdir(resourcePath, function (err: any, files: any) { if (err) { - console.error("Could not list the directory.", err); + console.error('Could not list the directory.', err); process.exit(1); } - files.forEach(function (file: any, index: any) { + files.forEach(function (file: any) { // Make one pass and make the file complete - var filePath = path.join(resourcePath, file); + const filePath = path.join(resourcePath, file); fs.stat(filePath, function (error: any, stat: any) { if (error) { - console.error("Error getting file statistics.", error); + console.error('Error getting file statistics.', error); return; } if (stat.isFile()) { - var extension = re.exec(filePath); + const extension = re.exec(filePath); if (extension) { if (extension[1].toLowerCase() === 'json') { if (file !== 'TopicMetadata.json') { console.log("'%s' is a JSON Resource file.", filePath); - fs.readFile(filePath, "utf8", (err: any, jsonString: string) => { + fs.readFile(filePath, 'utf8', (err: any, jsonString: string) => { if (err) { - console.error("Failed to read file:", err); + console.error('Failed to read file:', err); return; } const resource = JSON.parse(jsonString); - FhirUtilities.store(resource, function() {}, function() {}); - }) + FhirUtilities.store(resource, function() { return; }, function() { return; }); + }); } } } @@ -170,4 +171,4 @@ export class FhirUtilities { }); } -} \ No newline at end of file +} diff --git a/src/globals.ts b/src/globals.ts index 1a181fbc..f8939cf4 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -1,5 +1,5 @@ export class Globals { - static database: any - static databaseClient: any + static database: any; + static databaseClient: any; } diff --git a/src/lib/Database.ts b/src/lib/Database.ts index ab89a5b2..d8e929d4 100644 --- a/src/lib/Database.ts +++ b/src/lib/Database.ts @@ -1,13 +1,13 @@ export abstract class Database{ - public location: string - public database: any - public client: any + public location: string; + public database: any; + public client: any; constructor(public config: any) { this.location = config.location; return this; } - abstract connect(): any + abstract connect(): any; } diff --git a/src/lib/MongoDatabase.ts b/src/lib/MongoDatabase.ts index cf3b9106..6e8d8720 100644 --- a/src/lib/MongoDatabase.ts +++ b/src/lib/MongoDatabase.ts @@ -1,9 +1,9 @@ -import { Database } from "./Database"; -import * as mongoDB from "mongodb" +import { Database } from './Database'; +import * as mongoDB from 'mongodb'; export class MongoDatabase extends Database { - options: any - db_name: string + options: any; + db_name: string; constructor(config: any) { super(config); @@ -13,11 +13,11 @@ export class MongoDatabase extends Database { } connect = () => - new Promise((resolve, reject) => { + new Promise((resolve) => { // Connect to mongo - console.log("MongoDatabase connect: " + this.location); + console.log('MongoDatabase connect: ' + this.location); this.client = new mongoDB.MongoClient(this.location); this.database = this.client.db(this.db_name); - return this.client.connect(); + return resolve(this.client.connect()); }); } diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts index 438fd7e8..b6e02d88 100644 --- a/src/lib/TingoDatabase.ts +++ b/src/lib/TingoDatabase.ts @@ -1,4 +1,4 @@ -import { Database } from "./Database"; +import { Database } from './Database'; import * as fs from 'fs'; const tingoDb = require('tingodb')(); @@ -11,14 +11,14 @@ export class TingoDatabase extends Database { } connect = () => - new Promise((resolve, reject) => { + new Promise((resolve) => { // create the database folder - fs.mkdirSync(this.location, { recursive: true }) + fs.mkdirSync(this.location, { recursive: true }); // Connect to tingo - console.log("TingoDatabase connect: " + this.location); - this.database = new tingoDb.Db(this.location, {}) - this.client = ""; + console.log('TingoDatabase connect: ' + this.location); + this.database = new tingoDb.Db(this.location, {}); + this.client = ''; return resolve(this.database); }); diff --git a/src/lib/winston.test.ts b/src/lib/winston.test.ts index 8c7058e6..508847bd 100644 --- a/src/lib/winston.test.ts +++ b/src/lib/winston.test.ts @@ -6,7 +6,6 @@ */ import container from './winston'; import config from '../config'; -import winston, { Container, transport, transports } from 'winston'; describe('Logger Class', () => { beforeEach(() => { diff --git a/src/main.ts b/src/main.ts index 943a3f64..9a982113 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,8 +4,8 @@ import config from './config'; import { Database } from './lib/Database'; import { TingoDatabase } from './lib/TingoDatabase'; import { MongoDatabase } from './lib/MongoDatabase'; -import constants from './constants' -import { Globals } from './globals' +import constants from './constants'; +import { Globals } from './globals'; import { FhirUtilities } from './fhir/utilities'; /** @@ -23,7 +23,7 @@ export default async function main() { const { server: serverConfig, database: databaseConfig } = config; // Setup the database - var dbClient: Database; + let dbClient: Database; switch (databaseConfig.selected) { case constants.TINGO_DB: dbClient = new TingoDatabase(databaseConfig.tingoConfig); diff --git a/src/server.test.ts b/src/server.test.ts index 5d5d2747..0a8724ae 100644 --- a/src/server.test.ts +++ b/src/server.test.ts @@ -1,8 +1,5 @@ -import bodyParser from 'body-parser'; -import morgan from 'morgan'; import { initialize, REMSServer } from './server'; import config from './config'; -import express from 'express'; describe('REMSServer class', () => { let server: REMSServer; diff --git a/src/server.ts b/src/server.ts index 913175b2..ed782011 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,9 +1,7 @@ -import express from 'express'; import cors from 'cors'; import bodyParser from 'body-parser'; import container from './lib/winston'; import morgan from 'morgan'; -import _ from 'lodash'; import Hook from './hooks/Hook'; import remsService from './hooks/rems.hook'; @@ -12,7 +10,7 @@ const { Server } = require('@projecttacoma/node-fhir-server-core'); const logger = container.get('application'); const initialize = (config: any) => { - const logLevel = _.get(config, 'logging.level'); + //const logLevel = _.get(config, 'logging.level'); return new REMSServer(config.fhirServerConfig) .configureMiddleware() .configureSession() @@ -65,7 +63,7 @@ class REMSServer extends Server { * @description Enable streaming logs via morgan */ configureLogstream({ log, level = 'info' }: { log?: any; level?: string } = {}) { - super.configureLogstream + super.configureLogstream; this.app.use( log ? log diff --git a/src/services/library.service.ts b/src/services/library.service.ts index fe08d894..88b641d1 100644 --- a/src/services/library.service.ts +++ b/src/services/library.service.ts @@ -1,21 +1,18 @@ -const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -const moment = require('moment-timezone'); - -import constants from '../constants' -import { Globals } from '../globals' +import constants from '../constants'; +import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; module.exports.searchById = (args: any) => new Promise((resolve, reject) => { - let { base_version, id } = args; + const { base_version, id } = args; console.log('Library >>> searchById: -- ' + id); - let Library = FhirUtilities.getLibrary(base_version); + const Library = FhirUtilities.getLibrary(base_version); // Grab an instance of our DB and collection - let db = Globals.database; - let collection = db.collection(`${constants.COLLECTION.LIBRARY}_${base_version}`); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.LIBRARY}_${base_version}`); // Query our collection for this observation collection.findOne({ id: id.toString() }, (err: any, library: any) => { if (err) { @@ -25,14 +22,14 @@ module.exports.searchById = (args: any) => if (library) { resolve(new Library(library)); } - resolve(""); + resolve(''); }); }); module.exports.create = ( args: any, req: any ) => new Promise((resolve, reject) => { console.log('Library >>> create'); - let resource = req.req.body; - let { base_version } = args; + const resource = req.req.body; + const { base_version } = args; FhirUtilities.store(resource, resolve, reject, base_version); }); diff --git a/src/services/patient.service.ts b/src/services/patient.service.ts index c6f4be6c..ad77f073 100644 --- a/src/services/patient.service.ts +++ b/src/services/patient.service.ts @@ -1,21 +1,18 @@ -const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -const moment = require('moment-timezone'); - -import constants from '../constants' -import { Globals } from '../globals' +import constants from '../constants'; +import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; module.exports.searchById = (args: any) => new Promise((resolve, reject) => { - let { base_version, id } = args; + const { base_version, id } = args; console.log('Patient >>> searchById -- ' + id); - let Patient = FhirUtilities.getPatient(base_version); + const Patient = FhirUtilities.getPatient(base_version); // Grab an instance of our DB and collection - let db = Globals.database; - let collection = db.collection(`${constants.COLLECTION.PATIENT}_${base_version}`); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.PATIENT}_${base_version}`); // Query our collection for this observation collection.findOne({ id: id.toString() }, (err: any, patient: any) => { if (err) { @@ -25,14 +22,14 @@ module.exports.searchById = (args: any) => if (patient) { resolve(new Patient(patient)); } - resolve(""); + resolve(''); }); }); module.exports.create = ( args: any, req: any ) => new Promise((resolve, reject) => { console.log('Patient >>> create'); - let resource = req.req.body; - let { base_version } = args; + const resource = req.req.body; + const { base_version } = args; FhirUtilities.store(resource, resolve, reject, base_version); }); diff --git a/src/services/questionnaire.service.ts b/src/services/questionnaire.service.ts index 43fb542f..f368d70f 100644 --- a/src/services/questionnaire.service.ts +++ b/src/services/questionnaire.service.ts @@ -1,21 +1,18 @@ -const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -const moment = require('moment-timezone'); - -import constants from '../constants' -import { Globals } from '../globals' +import constants from '../constants'; +import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; module.exports.searchById = (args: any) => new Promise((resolve, reject) => { - let { base_version, id } = args; + const { base_version, id } = args; console.log('Questionnaire >>> searchById: -- ' + id); - let Questionnaire = FhirUtilities.getQuestionnaire(base_version); + const Questionnaire = FhirUtilities.getQuestionnaire(base_version); // Grab an instance of our DB and collection - let db = Globals.database; - let collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRE}_${base_version}`); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRE}_${base_version}`); // Query our collection for this observation collection.findOne({ id: id.toString() }, (err: any, questionnaire: any) => { if (err) { @@ -25,14 +22,14 @@ module.exports.searchById = (args: any) => if (questionnaire) { resolve(new Questionnaire(questionnaire)); } - resolve(""); + resolve(''); }); }); module.exports.create = (args: any, req: any ) => new Promise((resolve, reject) => { console.log('Questionnaire >>> create'); - let resource = req.req.body; - let { base_version } = args; + const resource = req.req.body; + const { base_version } = args; FhirUtilities.store(resource, resolve, reject, base_version); }); diff --git a/src/services/questionnaireresponse.service.ts b/src/services/questionnaireresponse.service.ts index b795ecb2..670ad035 100644 --- a/src/services/questionnaireresponse.service.ts +++ b/src/services/questionnaireresponse.service.ts @@ -1,21 +1,18 @@ -const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -const moment = require('moment-timezone'); - -import constants from '../constants' -import { Globals } from '../globals' +import constants from '../constants'; +import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; module.exports.searchById = (args: any) => new Promise((resolve, reject) => { - let { base_version, id } = args; + const { base_version, id } = args; console.log('QuestionnaireResponse >>> searchById: -- ' + id); - let QuestionnaireResponse = FhirUtilities.getQuestionnaireResponse(base_version); + const QuestionnaireResponse = FhirUtilities.getQuestionnaireResponse(base_version); // Grab an instance of our DB and collection - let db = Globals.database; - let collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${base_version}`); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${base_version}`); // Query our collection for this observation collection.findOne({ id: id.toString() }, (err: any, questionnaireResponse: any) => { if (err) { @@ -25,14 +22,14 @@ module.exports.searchById = (args: any) => if (questionnaireResponse) { resolve(new QuestionnaireResponse(questionnaireResponse)); } - resolve(""); + resolve(''); }); }); module.exports.create = (args: any, req: any ) => new Promise((resolve, reject) => { console.log('QuestionnaireResponse >>> create'); - let resource = req.req.body; - let { base_version } = args; + const resource = req.req.body; + const { base_version } = args; FhirUtilities.store(resource, resolve, reject, base_version); }); diff --git a/src/services/valueset.service.ts b/src/services/valueset.service.ts index aa041657..c8a08243 100644 --- a/src/services/valueset.service.ts +++ b/src/services/valueset.service.ts @@ -1,21 +1,18 @@ -const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -const moment = require('moment-timezone'); - -import constants from '../constants' -import { Globals } from '../globals' +import constants from '../constants'; +import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; module.exports.searchById = (args: any) => new Promise((resolve, reject) => { - let { base_version, id } = args; + const { base_version, id } = args; console.log('ValueSet >>> searchById: -- ' + id); - let ValueSet = FhirUtilities.getValueSet(base_version); + const ValueSet = FhirUtilities.getValueSet(base_version); // Grab an instance of our DB and collection - let db = Globals.database; - let collection = db.collection(`${constants.COLLECTION.VALUESET}_${base_version}`); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.VALUESET}_${base_version}`); // Query our collection for this observation collection.findOne({ id: id.toString() }, (err: any, valueSet: any) => { if (err) { @@ -25,14 +22,14 @@ module.exports.searchById = (args: any) => if (valueSet) { resolve(new ValueSet(valueSet)); } - resolve(""); + resolve(''); }); }); module.exports.create = (args: any, req: any ) => new Promise((resolve, reject) => { console.log('ValuSet >>> create'); - let resource = req.req.body; - let { base_version } = args; + const resource = req.req.body; + const { base_version } = args; FhirUtilities.store(resource, resolve, reject, base_version); }); From 10358a82be862b55710bb4d84069cb2292b1e0eb Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Tue, 3 Jan 2023 18:49:44 -0500 Subject: [PATCH 22/83] Ignore the require lint warnings. --- src/config.ts | 2 ++ src/fhir/utilities.ts | 2 ++ src/lib/TingoDatabase.ts | 2 ++ src/server.ts | 2 ++ 4 files changed, 8 insertions(+) diff --git a/src/config.ts b/src/config.ts index d8409603..e5b0fc9a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,5 +1,7 @@ + /* eslint-disable */ const { VERSIONS } = require('@projecttacoma/node-fhir-server-core').constants; const env = require('var'); + /* eslint-enable */ // Set up whitelist diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index ee8a90b4..3f922129 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -1,5 +1,7 @@ + /* eslint-disable */ const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); + /* eslint-enaable */ import * as moment from 'moment'; import 'moment-timezone'; diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts index b6e02d88..cfd530f3 100644 --- a/src/lib/TingoDatabase.ts +++ b/src/lib/TingoDatabase.ts @@ -1,6 +1,8 @@ import { Database } from './Database'; import * as fs from 'fs'; + /* eslint-disable */ const tingoDb = require('tingodb')(); + /* eslint-enable */ export class TingoDatabase extends Database { diff --git a/src/server.ts b/src/server.ts index ed782011..20d50ec7 100644 --- a/src/server.ts +++ b/src/server.ts @@ -5,7 +5,9 @@ import morgan from 'morgan'; import Hook from './hooks/Hook'; import remsService from './hooks/rems.hook'; + /* eslint-disable */ const { Server } = require('@projecttacoma/node-fhir-server-core'); + /* eslint-enable */ const logger = container.get('application'); From d780041b255fe9582b857a63e97df5ad28782cf6 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Tue, 3 Jan 2023 19:00:38 -0500 Subject: [PATCH 23/83] Update code to be compliant with code style using prettier. --- src/config.ts | 51 ++- src/constants.ts | 5 +- src/fhir/utilities.ts | 307 +++++++++--------- src/globals.ts | 5 +- src/lib/Database.ts | 19 +- src/lib/MongoDatabase.ts | 34 +- src/lib/TingoDatabase.ts | 8 +- src/server.ts | 4 +- src/services/library.service.ts | 3 +- src/services/patient.service.ts | 3 +- src/services/questionnaire.service.ts | 3 +- src/services/questionnaireresponse.service.ts | 7 +- src/services/valueset.service.ts | 3 +- 13 files changed, 223 insertions(+), 229 deletions(-) diff --git a/src/config.ts b/src/config.ts index e5b0fc9a..0a207488 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,18 +1,17 @@ - /* eslint-disable */ +/* eslint-disable */ const { VERSIONS } = require('@projecttacoma/node-fhir-server-core').constants; const env = require('var'); - /* eslint-enable */ - +/* eslint-enable */ // Set up whitelist -const whitelist_env = (env.WHITELIST && env.WHITELIST.split(',').map((host: string) => host.trim())) || false; +const whitelist_env = + (env.WHITELIST && env.WHITELIST.split(',').map((host: string) => host.trim())) || false; // If no whitelist is present, disable cors // If it's length is 1, set it to a string, so * works // If there are multiple, keep them as an array const whitelist = whitelist_env && whitelist_env.length === 1 ? whitelist_env[0] : whitelist_env; - export default { server: { port: 8090, @@ -39,14 +38,14 @@ export default { options: { //auto_reconnect: true, useUnifiedTopology: true, - useNewUrlParser: true, - }, - }, + useNewUrlParser: true + } + } }, fhirServerConfig: { auth: { // This servers URI - resourceServer: env.RESOURCE_SERVER, + resourceServer: env.RESOURCE_SERVER // // if you use this strategy, you need to add the corresponding env vars to docker-compose // @@ -62,11 +61,11 @@ export default { // allow Access-Control-Allow-Origin corsOptions: { maxAge: 86400, - origin: whitelist, - }, + origin: whitelist + } }, logging: { - level: env.LOGGING_LEVEL, + level: env.LOGGING_LEVEL }, // // If you want to set up conformance statement with security enabled @@ -75,12 +74,12 @@ export default { security: [ { url: 'authorize', - valueUri: `${env.AUTH_SERVER_URI}/authorize`, + valueUri: `${env.AUTH_SERVER_URI}/authorize` }, { url: 'token', - valueUri: `${env.AUTH_SERVER_URI}/token`, - }, + valueUri: `${env.AUTH_SERVER_URI}/token` + } // optional - registration ], // @@ -96,24 +95,24 @@ export default { profiles: { Patient: { service: './src/services/patient.service.ts', - versions: [VERSIONS['4_0_0']], + versions: [VERSIONS['4_0_0']] }, library: { - service: './src/services/library.service.ts', - versions: [VERSIONS['4_0_0']], + service: './src/services/library.service.ts', + versions: [VERSIONS['4_0_0']] }, questionnaire: { - service: './src/services/questionnaire.service.ts', - versions: [VERSIONS['4_0_0']], + service: './src/services/questionnaire.service.ts', + versions: [VERSIONS['4_0_0']] }, questionnaireresponse: { - service: './src/services/questionnaireresponse.service.ts', - versions: [VERSIONS['4_0_0']], + service: './src/services/questionnaireresponse.service.ts', + versions: [VERSIONS['4_0_0']] }, valueset: { - service: './src/services/valueset.service.ts', - versions: [VERSIONS['4_0_0']], - }, - }, + service: './src/services/valueset.service.ts', + versions: [VERSIONS['4_0_0']] + } + } } }; diff --git a/src/constants.ts b/src/constants.ts index b6ae330a..23fbe8bc 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,4 +1,3 @@ - export default { MONGO_DB: 'mongo', TINGO_DB: 'tingo', @@ -118,6 +117,6 @@ export default { TESTSCRIPT: 'TestScript', VALUESET: 'ValueSet', VISIONPRESCRIPTION: 'VisionPrescription', - CLIENT: 'Client', - }, + CLIENT: 'Client' + } }; diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 3f922129..e58bc3b2 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -1,7 +1,6 @@ - - /* eslint-disable */ +/* eslint-disable */ const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); - /* eslint-enaable */ +/* eslint-enaable */ import * as moment from 'moment'; import 'moment-timezone'; @@ -14,163 +13,167 @@ import * as process from 'process'; const re = /(?:\.([^.]+))?$/; export class FhirUtilities { - static getLibrary(baseVersion: string) { - return resolveSchema(baseVersion, 'Library'); + static getLibrary(baseVersion: string) { + return resolveSchema(baseVersion, 'Library'); + } + + static getPatient(baseVersion: string) { + return resolveSchema(baseVersion, 'Patient'); + } + + static getQuestionnaire(baseVersion: string) { + return resolveSchema(baseVersion, 'Questionnaire'); + } + + static getQuestionnaireResponse(baseVersion: string) { + return resolveSchema(baseVersion, 'QuestionnaireResponse'); + } + + static getValueSet(baseVersion: string) { + return resolveSchema(baseVersion, 'ValueSet'); + } + + static getMeta = (baseVersion: string) => { + return resolveSchema(baseVersion, 'Meta'); + }; + + static async store(resource: any, resolve: any, reject: any, baseVersion = '4_0_0') { + const db = Globals.database; + + // If no resource ID was provided, generate one. + let id = ''; + if (!resource.id) { + // If no resource ID was provided, generate one. + id = self.crypto.randomUUID(); + } else { + id = resource.id; } - - static getPatient(baseVersion: string) { - return resolveSchema(baseVersion, 'Patient'); + console.log(' FhirUtilities::store: ' + resource.resourceType + ' -- ' + id); + + let collectionString = ''; + let historyCollectionString = ''; + + // Build the strings to connect to the collections + switch (resource.resourceType) { + case 'Library': + collectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}_History`; + break; + case 'Patient': + collectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}_History`; + break; + case 'Questionnaire': + collectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}_History`; + break; + case 'QuestionnaireResponse': + collectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}_History`; + break; + case 'ValueSet': + collectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}`; + historyCollectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}_History`; + break; } - static getQuestionnaire(baseVersion: string) { - return resolveSchema(baseVersion, 'Questionnaire'); - } + const Resource = resolveSchema(baseVersion, resource.resourceType); + const fhirResource = new Resource(resource); - static getQuestionnaireResponse(baseVersion: string) { - return resolveSchema(baseVersion, 'QuestionnaireResponse'); - } + // Create the resource's metadata + const Meta = FhirUtilities.getMeta(baseVersion); + fhirResource.meta = new Meta({ + versionId: '1', + lastUpdated: moment.utc().format('YYYY-MM-DDTHH:mm:ssZ') + }); - static getValueSet(baseVersion: string) { - return resolveSchema(baseVersion, 'ValueSet'); + if (collectionString === '') { + return reject(' Unsupported FHIR Resource Type'); } - - static getMeta = (baseVersion: string) => { - return resolveSchema(baseVersion, 'Meta'); - }; - - static async store(resource: any, resolve: any, reject: any, baseVersion = '4_0_0') { - - const db = Globals.database; - - // If no resource ID was provided, generate one. - let id = ''; - if (!resource.id) { - // If no resource ID was provided, generate one. - id = self.crypto.randomUUID(); - } else { - id = resource.id; + const collection = db.collection(collectionString); + + // Create the document to be inserted into teh database + const doc = JSON.parse(JSON.stringify(fhirResource.toJSON())); + Object.assign(doc, { id: id }); + + // Create a clone of the object without the _id parameter before assigning a value to + // the _id parameter in the original document + const history_doc = Object.assign({}, doc); + Object.assign(doc, { _id: id }); + + // Insert our resource record + collection.insert(doc, (err: any) => { + if (err) { + console.log(' Error with %s.create: ', resource.resourceType, err.message); + return reject(err); + } else { + console.log(' Successfully added ' + resource.resourceType + ' -- ' + id); + } + + // Save the resource to history + const history_collection = db.collection(historyCollectionString); + + // Insert our patient record to history but don't assign _id + return history_collection.insert(history_doc, (err2: any) => { + if (err2) { + console.log(' Error with %sHistory.create: ', resource.resourceType, err2.message); + return reject(err2); } - console.log(' FhirUtilities::store: ' + resource.resourceType + ' -- ' + id); - - let collectionString = ''; - let historyCollectionString = ''; - - // Build the strings to connect to the collections - switch (resource.resourceType) { - case 'Library': - collectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}`; - historyCollectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}_History`; - break; - case 'Patient': - collectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}`; - historyCollectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}_History`; - break; - case 'Questionnaire': - collectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}`; - historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRE}_${baseVersion}_History`; - break; - case 'QuestionnaireResponse': - collectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}`; - historyCollectionString = `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${baseVersion}_History`; - break; - case 'ValueSet': - collectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}`; - historyCollectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}_History`; - break; - } - - const Resource = resolveSchema(baseVersion, resource.resourceType); - const fhirResource = new Resource(resource); - - // Create the resource's metadata - const Meta = FhirUtilities.getMeta(baseVersion); - fhirResource.meta = new Meta({ - versionId: '1', - lastUpdated: moment.utc().format('YYYY-MM-DDTHH:mm:ssZ'), - }); - - if (collectionString === '') { - return reject(' Unsupported FHIR Resource Type'); - } - const collection = db.collection(collectionString); - - // Create the document to be inserted into teh database - const doc = JSON.parse(JSON.stringify(fhirResource.toJSON())); - Object.assign(doc, { id: id }); - - // Create a clone of the object without the _id parameter before assigning a value to - // the _id parameter in the original document - const history_doc = Object.assign({}, doc); - Object.assign(doc, { _id: id }); - - // Insert our resource record - collection.insert(doc, (err: any) => { - if (err) { - console.log(' Error with %s.create: ', resource.resourceType, err.message); - return reject(err); - } else { - console.log(' Successfully added ' + resource.resourceType + ' -- ' + id); - } - - // Save the resource to history - const history_collection = db.collection(historyCollectionString); - - // Insert our patient record to history but don't assign _id - return history_collection.insert(history_doc, (err2: any) => { - if (err2) { - console.log(' Error with %sHistory.create: ', resource.resourceType, err2.message); - return reject(err2); - } - return resolve({ id: doc.id, resource_version: doc.meta.versionId }); - }); - }); - } - - - static loadResources(resourcePath: string) { - console.log('Loading FHIR Resources from: ' + resourcePath); - - // Loop through all the files in the temp directory - fs.readdir(resourcePath, function (err: any, files: any) { - if (err) { - console.error('Could not list the directory.', err); - process.exit(1); - } - - files.forEach(function (file: any) { - // Make one pass and make the file complete - const filePath = path.join(resourcePath, file); - - fs.stat(filePath, function (error: any, stat: any) { - if (error) { - console.error('Error getting file statistics.', error); - return; - } - - if (stat.isFile()) { - const extension = re.exec(filePath); - if (extension) { - if (extension[1].toLowerCase() === 'json') { - if (file !== 'TopicMetadata.json') { - console.log("'%s' is a JSON Resource file.", filePath); - fs.readFile(filePath, 'utf8', (err: any, jsonString: string) => { - if (err) { - console.error('Failed to read file:', err); - return; - } - const resource = JSON.parse(jsonString); - FhirUtilities.store(resource, function() { return; }, function() { return; }); - }); - } + return resolve({ id: doc.id, resource_version: doc.meta.versionId }); + }); + }); + } + + static loadResources(resourcePath: string) { + console.log('Loading FHIR Resources from: ' + resourcePath); + + // Loop through all the files in the temp directory + fs.readdir(resourcePath, function (err: any, files: any) { + if (err) { + console.error('Could not list the directory.', err); + process.exit(1); + } + + files.forEach(function (file: any) { + // Make one pass and make the file complete + const filePath = path.join(resourcePath, file); + + fs.stat(filePath, function (error: any, stat: any) { + if (error) { + console.error('Error getting file statistics.', error); + return; + } + + if (stat.isFile()) { + const extension = re.exec(filePath); + if (extension) { + if (extension[1].toLowerCase() === 'json') { + if (file !== 'TopicMetadata.json') { + console.log("'%s' is a JSON Resource file.", filePath); + fs.readFile(filePath, 'utf8', (err: any, jsonString: string) => { + if (err) { + console.error('Failed to read file:', err); + return; } - } - } - else if (stat.isDirectory()) { - FhirUtilities.loadResources(filePath); + const resource = JSON.parse(jsonString); + FhirUtilities.store( + resource, + function () { + return; + }, + function () { + return; + } + ); + }); } - }); - }); + } + } + } else if (stat.isDirectory()) { + FhirUtilities.loadResources(filePath); + } }); - } - + }); + }); + } } diff --git a/src/globals.ts b/src/globals.ts index f8939cf4..240d5cbf 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -1,5 +1,4 @@ - export class Globals { - static database: any; - static databaseClient: any; + static database: any; + static databaseClient: any; } diff --git a/src/lib/Database.ts b/src/lib/Database.ts index d8e929d4..39ccad48 100644 --- a/src/lib/Database.ts +++ b/src/lib/Database.ts @@ -1,13 +1,12 @@ +export abstract class Database { + public location: string; + public database: any; + public client: any; -export abstract class Database{ - public location: string; - public database: any; - public client: any; + constructor(public config: any) { + this.location = config.location; + return this; + } - constructor(public config: any) { - this.location = config.location; - return this; - } - - abstract connect(): any; + abstract connect(): any; } diff --git a/src/lib/MongoDatabase.ts b/src/lib/MongoDatabase.ts index 6e8d8720..4b726c87 100644 --- a/src/lib/MongoDatabase.ts +++ b/src/lib/MongoDatabase.ts @@ -2,22 +2,22 @@ import { Database } from './Database'; import * as mongoDB from 'mongodb'; export class MongoDatabase extends Database { - options: any; - db_name: string; + options: any; + db_name: string; - constructor(config: any) { - super(config); - this.options = config.options; - this.db_name = config.db_name; - return this; - } - - connect = () => - new Promise((resolve) => { - // Connect to mongo - console.log('MongoDatabase connect: ' + this.location); - this.client = new mongoDB.MongoClient(this.location); - this.database = this.client.db(this.db_name); - return resolve(this.client.connect()); - }); + constructor(config: any) { + super(config); + this.options = config.options; + this.db_name = config.db_name; + return this; } + + connect = () => + new Promise(resolve => { + // Connect to mongo + console.log('MongoDatabase connect: ' + this.location); + this.client = new mongoDB.MongoClient(this.location); + this.database = this.client.db(this.db_name); + return resolve(this.client.connect()); + }); +} diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts index cfd530f3..a4141442 100644 --- a/src/lib/TingoDatabase.ts +++ b/src/lib/TingoDatabase.ts @@ -1,11 +1,10 @@ import { Database } from './Database'; import * as fs from 'fs'; - /* eslint-disable */ +/* eslint-disable */ const tingoDb = require('tingodb')(); - /* eslint-enable */ +/* eslint-enable */ export class TingoDatabase extends Database { - constructor(config: any) { super(config); // read anything else needed from the config here @@ -13,7 +12,7 @@ export class TingoDatabase extends Database { } connect = () => - new Promise((resolve) => { + new Promise(resolve => { // create the database folder fs.mkdirSync(this.location, { recursive: true }); @@ -23,5 +22,4 @@ export class TingoDatabase extends Database { this.client = ''; return resolve(this.database); }); - } diff --git a/src/server.ts b/src/server.ts index 20d50ec7..fb8cb866 100644 --- a/src/server.ts +++ b/src/server.ts @@ -5,9 +5,9 @@ import morgan from 'morgan'; import Hook from './hooks/Hook'; import remsService from './hooks/rems.hook'; - /* eslint-disable */ +/* eslint-disable */ const { Server } = require('@projecttacoma/node-fhir-server-core'); - /* eslint-enable */ +/* eslint-enable */ const logger = container.get('application'); diff --git a/src/services/library.service.ts b/src/services/library.service.ts index 88b641d1..888bfe72 100644 --- a/src/services/library.service.ts +++ b/src/services/library.service.ts @@ -2,7 +2,6 @@ import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; - module.exports.searchById = (args: any) => new Promise((resolve, reject) => { const { base_version, id } = args; @@ -26,7 +25,7 @@ module.exports.searchById = (args: any) => }); }); -module.exports.create = ( args: any, req: any ) => +module.exports.create = (args: any, req: any) => new Promise((resolve, reject) => { console.log('Library >>> create'); const resource = req.req.body; diff --git a/src/services/patient.service.ts b/src/services/patient.service.ts index ad77f073..86e38940 100644 --- a/src/services/patient.service.ts +++ b/src/services/patient.service.ts @@ -2,7 +2,6 @@ import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; - module.exports.searchById = (args: any) => new Promise((resolve, reject) => { const { base_version, id } = args; @@ -26,7 +25,7 @@ module.exports.searchById = (args: any) => }); }); -module.exports.create = ( args: any, req: any ) => +module.exports.create = (args: any, req: any) => new Promise((resolve, reject) => { console.log('Patient >>> create'); const resource = req.req.body; diff --git a/src/services/questionnaire.service.ts b/src/services/questionnaire.service.ts index f368d70f..79ede48f 100644 --- a/src/services/questionnaire.service.ts +++ b/src/services/questionnaire.service.ts @@ -2,7 +2,6 @@ import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; - module.exports.searchById = (args: any) => new Promise((resolve, reject) => { const { base_version, id } = args; @@ -26,7 +25,7 @@ module.exports.searchById = (args: any) => }); }); -module.exports.create = (args: any, req: any ) => +module.exports.create = (args: any, req: any) => new Promise((resolve, reject) => { console.log('Questionnaire >>> create'); const resource = req.req.body; diff --git a/src/services/questionnaireresponse.service.ts b/src/services/questionnaireresponse.service.ts index 670ad035..b7ffe47f 100644 --- a/src/services/questionnaireresponse.service.ts +++ b/src/services/questionnaireresponse.service.ts @@ -2,7 +2,6 @@ import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; - module.exports.searchById = (args: any) => new Promise((resolve, reject) => { const { base_version, id } = args; @@ -12,7 +11,9 @@ module.exports.searchById = (args: any) => // Grab an instance of our DB and collection const db = Globals.database; - const collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${base_version}`); + const collection = db.collection( + `${constants.COLLECTION.QUESTIONNAIRERESPONSE}_${base_version}` + ); // Query our collection for this observation collection.findOne({ id: id.toString() }, (err: any, questionnaireResponse: any) => { if (err) { @@ -26,7 +27,7 @@ module.exports.searchById = (args: any) => }); }); -module.exports.create = (args: any, req: any ) => +module.exports.create = (args: any, req: any) => new Promise((resolve, reject) => { console.log('QuestionnaireResponse >>> create'); const resource = req.req.body; diff --git a/src/services/valueset.service.ts b/src/services/valueset.service.ts index c8a08243..e1a1e8d1 100644 --- a/src/services/valueset.service.ts +++ b/src/services/valueset.service.ts @@ -2,7 +2,6 @@ import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; - module.exports.searchById = (args: any) => new Promise((resolve, reject) => { const { base_version, id } = args; @@ -26,7 +25,7 @@ module.exports.searchById = (args: any) => }); }); -module.exports.create = (args: any, req: any ) => +module.exports.create = (args: any, req: any) => new Promise((resolve, reject) => { console.log('ValuSet >>> create'); const resource = req.req.body; From cab09e2cec97c7b23c396f5219ab629eb7a68edb Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Tue, 3 Jan 2023 23:54:31 -0500 Subject: [PATCH 24/83] Get rid of the lint disabling sections. --- src/config.ts | 16 +++++++--------- src/fhir/utilities.ts | 4 +--- src/lib/TingoDatabase.ts | 7 +++---- src/server.ts | 5 +---- .../@projecttacoma/node-fhir-server-core.d.ts | 2 ++ src/typings/tingodb.d.ts | 1 + src/typings/var.d.ts | 1 + tsconfig.json | 7 ++++++- 8 files changed, 22 insertions(+), 21 deletions(-) create mode 100644 src/typings/@projecttacoma/node-fhir-server-core.d.ts create mode 100644 src/typings/tingodb.d.ts create mode 100644 src/typings/var.d.ts diff --git a/src/config.ts b/src/config.ts index 0a207488..1f3bdb79 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,7 +1,5 @@ -/* eslint-disable */ -const { VERSIONS } = require('@projecttacoma/node-fhir-server-core').constants; -const env = require('var'); -/* eslint-enable */ +import { constants as fhirConstants } from '@projecttacoma/node-fhir-server-core'; +import env from 'var'; // Set up whitelist const whitelist_env = @@ -95,23 +93,23 @@ export default { profiles: { Patient: { service: './src/services/patient.service.ts', - versions: [VERSIONS['4_0_0']] + versions: [fhirConstants.VERSIONS['4_0_0']] }, library: { service: './src/services/library.service.ts', - versions: [VERSIONS['4_0_0']] + versions: [fhirConstants.VERSIONS['4_0_0']] }, questionnaire: { service: './src/services/questionnaire.service.ts', - versions: [VERSIONS['4_0_0']] + versions: [fhirConstants.VERSIONS['4_0_0']] }, questionnaireresponse: { service: './src/services/questionnaireresponse.service.ts', - versions: [VERSIONS['4_0_0']] + versions: [fhirConstants.VERSIONS['4_0_0']] }, valueset: { service: './src/services/valueset.service.ts', - versions: [VERSIONS['4_0_0']] + versions: [fhirConstants.VERSIONS['4_0_0']] } } } diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index e58bc3b2..79fc75ee 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -1,6 +1,4 @@ -/* eslint-disable */ -const { resolveSchema } = require('@projecttacoma/node-fhir-server-core'); -/* eslint-enaable */ +import { resolveSchema } from '@projecttacoma/node-fhir-server-core'; import * as moment from 'moment'; import 'moment-timezone'; diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts index a4141442..9d0a7e08 100644 --- a/src/lib/TingoDatabase.ts +++ b/src/lib/TingoDatabase.ts @@ -1,8 +1,6 @@ import { Database } from './Database'; import * as fs from 'fs'; -/* eslint-disable */ -const tingoDb = require('tingodb')(); -/* eslint-enable */ +import tingodb from 'tingodb'; export class TingoDatabase extends Database { constructor(config: any) { @@ -18,7 +16,8 @@ export class TingoDatabase extends Database { // Connect to tingo console.log('TingoDatabase connect: ' + this.location); - this.database = new tingoDb.Db(this.location, {}); + const tingo = new tingodb(); + this.database = new tingo.Db(this.location, {}); this.client = ''; return resolve(this.database); }); diff --git a/src/server.ts b/src/server.ts index fb8cb866..6e42122f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,10 +4,7 @@ import container from './lib/winston'; import morgan from 'morgan'; import Hook from './hooks/Hook'; import remsService from './hooks/rems.hook'; - -/* eslint-disable */ -const { Server } = require('@projecttacoma/node-fhir-server-core'); -/* eslint-enable */ +import { Server } from '@projecttacoma/node-fhir-server-core'; const logger = container.get('application'); diff --git a/src/typings/@projecttacoma/node-fhir-server-core.d.ts b/src/typings/@projecttacoma/node-fhir-server-core.d.ts new file mode 100644 index 00000000..863e8177 --- /dev/null +++ b/src/typings/@projecttacoma/node-fhir-server-core.d.ts @@ -0,0 +1,2 @@ +//declare constants; +declare module '@projecttacoma/node-fhir-server-core'; \ No newline at end of file diff --git a/src/typings/tingodb.d.ts b/src/typings/tingodb.d.ts new file mode 100644 index 00000000..276f4183 --- /dev/null +++ b/src/typings/tingodb.d.ts @@ -0,0 +1 @@ +declare module 'tingodb'; \ No newline at end of file diff --git a/src/typings/var.d.ts b/src/typings/var.d.ts new file mode 100644 index 00000000..c98b0ea7 --- /dev/null +++ b/src/typings/var.d.ts @@ -0,0 +1 @@ +declare module 'var'; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index ab777eb9..64fa6021 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,12 @@ "resolveJsonModule": true, "isolatedModules": true, "outDir": "dist", - "jsx": "react-jsx" + "jsx": "react-jsx", + "paths": { + "*": [ + "src/typings/*" + ] + } }, "include": [ "src" From 3e0d54fa99fed4707a1a00c177343b0738ae905f Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 4 Jan 2023 00:01:19 -0500 Subject: [PATCH 25/83] Run prettier again... --- src/typings/@projecttacoma/node-fhir-server-core.d.ts | 3 +-- src/typings/tingodb.d.ts | 2 +- src/typings/var.d.ts | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/typings/@projecttacoma/node-fhir-server-core.d.ts b/src/typings/@projecttacoma/node-fhir-server-core.d.ts index 863e8177..2e095190 100644 --- a/src/typings/@projecttacoma/node-fhir-server-core.d.ts +++ b/src/typings/@projecttacoma/node-fhir-server-core.d.ts @@ -1,2 +1 @@ -//declare constants; -declare module '@projecttacoma/node-fhir-server-core'; \ No newline at end of file +declare module '@projecttacoma/node-fhir-server-core'; diff --git a/src/typings/tingodb.d.ts b/src/typings/tingodb.d.ts index 276f4183..e2a88d48 100644 --- a/src/typings/tingodb.d.ts +++ b/src/typings/tingodb.d.ts @@ -1 +1 @@ -declare module 'tingodb'; \ No newline at end of file +declare module 'tingodb'; diff --git a/src/typings/var.d.ts b/src/typings/var.d.ts index c98b0ea7..fe6eefc8 100644 --- a/src/typings/var.d.ts +++ b/src/typings/var.d.ts @@ -1 +1 @@ -declare module 'var'; \ No newline at end of file +declare module 'var'; From 43262f931aa7f87a4836f7cb90ca029be95436df Mon Sep 17 00:00:00 2001 From: kennyEung Date: Thu, 5 Jan 2023 19:29:57 -0500 Subject: [PATCH 26/83] Delete auto_assign.yml Remove auto_assign file so GitHub can take over auto-assignement instead of the bot. --- .github/auto_assign.yml | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 .github/auto_assign.yml diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml deleted file mode 100644 index 407ed6d2..00000000 --- a/.github/auto_assign.yml +++ /dev/null @@ -1,16 +0,0 @@ -# Set to true to add reviewers to pull requests -addReviewers: true - -# Set to true to add assignees to pull requests -addAssignees: false - -# A list of reviewers to be added to pull requests (GitHub user name) -reviewers: - - zacharyrobin - - KeeyanGhoreshi - - smalho01 - - plarocque4 - - kennyEung - -# A number of reviewers added to the pull request, Set to 0 to add all reviewers -numberOfReviewers: 0 From 92ee91393458698b5603d23b6e1fb0534f0b16d2 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Mon, 5 Dec 2022 16:46:58 -0500 Subject: [PATCH 27/83] WIP --- src/__tests__/fixtures/library.json | 59 + src/__tests__/fixtures/questionnaire.json | 3527 +++++++++++++++++++++ src/__tests__/vsac_cache.test.js | 44 + src/lib/vsac_cache.ts | 75 + 4 files changed, 3705 insertions(+) create mode 100644 src/__tests__/fixtures/library.json create mode 100644 src/__tests__/fixtures/questionnaire.json create mode 100644 src/__tests__/vsac_cache.test.js create mode 100644 src/lib/vsac_cache.ts diff --git a/src/__tests__/fixtures/library.json b/src/__tests__/fixtures/library.json new file mode 100644 index 00000000..ca123617 --- /dev/null +++ b/src/__tests__/fixtures/library.json @@ -0,0 +1,59 @@ +{ + "resourceType": "Library", + "id": "HomeBloodGlucoseMonitorFaceToFace-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/HomeBloodGlucoseMonitorFaceToFace-prepopulation", + "name": "HomeBloodGlucoseMonitorFaceToFace-prepopulation", + "version": "0.0.1", + "title": "Blood Glucose Monitor Face To Face Prepopulation", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + }, + { + "type": "depends-on", + "resource": "Library/CDS_Connect_Commons_for_FHIRv400" + }, + { + "type": "depends-on", + "resource": "Library/DTRHelpers" + } + ], + "dataRequirement": [ + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35" + } + ] + }, + { + "type": "MedicationValueSet", + "codeFilter": [ + { + "path": "code", + "valueSet": "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.85" + } + ] + }, + { + "type": "MedicationStatement" + } + ], + "content": [ + { + "contentType": "application/elm+json", + "url": "files/HomeBloodGlucoseMonitor/r4/HomeBloodGlucoseMonitorFaceToFacePrepopulation-0.0.1.cql" + } + ] +} \ No newline at end of file diff --git a/src/__tests__/fixtures/questionnaire.json b/src/__tests__/fixtures/questionnaire.json new file mode 100644 index 00000000..338e199b --- /dev/null +++ b/src/__tests__/fixtures/questionnaire.json @@ -0,0 +1,3527 @@ +{ + "resourceType": "Questionnaire", + "id": "review-of-system", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "name": "Review Of System Module", + "status": "draft", + "item": [ + { + "linkId": "ROS", + "code": [ + { + "code": "71406-3", + "display": "Review of Systems", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Review of Systems", + "item": [ + { + "linkId": "ROS.1", + "code": [ + { + "code": "71407-1", + "display": "Constitutional / General", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Constitutional / General", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.1", + "code": [ + { + "code": "8943002", + "display": "Weight gain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weight gain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.2", + "code": [ + { + "code": "89362005", + "display": "Weight loss", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weight loss", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.3", + "code": [ + { + "code": "44186003", + "display": "Sleeping problems", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Sleeping problems", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.4", + "code": [ + { + "code": "84229001", + "display": "Fatigue", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fatigue", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.5", + "code": [ + { + "code": "386725007", + "display": "Fever", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fever", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.6", + "code": [ + { + "code": "43724002", + "display": "Chills", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Chills", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.7", + "code": [ + { + "code": "42984000", + "display": "Night sweats", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Night sweats", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.8", + "code": [ + { + "code": "52613005", + "display": "Excessive sweating", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Excessive sweating", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.1.9", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.2", + "code": [ + { + "code": "71408-9", + "display": "Eye", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Eye", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.1", + "code": [ + { + "code": "24982008", + "display": "Diplopia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Diplopia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.2", + "code": [ + { + "code": "225582009", + "display": "Glasses", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Glasses", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.3", + "code": [ + { + "code": "285049007", + "display": "Contact lenses", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Contact lenses", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "code": [ + { + "code": "75705005", + "display": "Redness", + "system": "http://snomed.info/sct" + } + ], + "linkId": "ROS.2.4", + "type": "choice", + "text": "Redness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.5", + "code": [ + { + "code": "18628002", + "display": "Discharge", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.6", + "code": [ + { + "code": "111516008", + "display": "Blurred vision", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Blurred vision", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.7", + "code": [ + { + "code": "23986001", + "display": "Glaucoma", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Glaucoma", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.8", + "code": [ + { + "code": "193570009", + "display": "Cataracts", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cataracts", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.2.9", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.3", + "code": [ + { + "code": "71409-7", + "display": "Ear-nose-mouth-throat", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Ear-nose-mouth-throat", + "item": [ + { + "linkId": "ROS.3.1", + "type": "group", + "text": "Nose", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.1", + "code": [ + { + "code": "249366005", + "display": "Epistaxis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Epistaxis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.2", + "code": [ + { + "code": "36971009", + "display": "Frequent sinus infections", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Frequent sinus infections", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.3", + "code": [ + { + "code": "64531003", + "display": "Discharge", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.4", + "code": [ + { + "code": "736499003", + "display": "Polyps", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Polyps", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "string", + "linkId": "ROS.3.1.5", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.3.2", + "type": "group", + "text": "Ear", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.2.1", + "code": [ + { + "code": "60862001", + "display": "Tinnitus", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tinnitus", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "choice", + "code": [ + { + "code": "300132001", + "display": "Discharge", + "system": "http://snomed.info/sct" + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.2.2", + "text": "Discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "choice", + "code": [ + { + "code": "15188001", + "display": "Hearing loss", + "system": "http://snomed.info/sct" + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.2.3", + "text": "Hearing loss", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "string", + "code": [], + "linkId": "ROS.3.2.4", + "text": "Other" + } + ] + }, + { + "type": "group", + "code": [], + "linkId": "ROS.3.3", + "text": "Mouth", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.3.1", + "code": [ + { + "code": "288939007", + "display": "Odynaphagia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Odynaphagia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.3.2", + "code": [ + { + "code": "46557008", + "display": "Tooth disorder", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tooth disorder", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.3.3", + "code": [ + { + "code": "278615005", + "display": "Uses dentures", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Uses dentures", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.3.3.4", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.3.4", + "type": "group", + "text": "Throat", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.4.1", + "code": [ + { + "code": "50219008", + "display": "Hoarseness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hoarseness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.3.4.2", + "type": "string", + "text": "Other" + } + ] + } + ] + }, + { + "linkId": "ROS.4", + "code": [ + { + "code": "71410-5", + "display": "Cardiovascular", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Cardiovascular System", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.1", + "code": [ + { + "code": "29857009", + "display": "Chest pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Chest pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.2", + "code": [ + { + "code": "80313002", + "display": "Palpitations", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Palpitations", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.3", + "code": [ + { + "code": "62744007", + "display": "Orthopnea", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Orthopnea", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.4", + "code": [ + { + "code": "88610006", + "display": "Murmur", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Murmur", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.4.5", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.5", + "code": [ + { + "code": "71411-3", + "display": "Respiratory", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Respiratory System", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.1", + "code": [ + { + "code": "49727002", + "display": "Cough", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cough", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.2", + "code": [ + { + "code": "66857006", + "display": "Hemoptysis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hemoptysis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.3", + "code": [ + { + "code": "267036007", + "display": "Shortness of breath", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Shortness of breath", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.4", + "code": [ + { + "code": "248599002", + "display": "Excess sputum production", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Excess sputum production", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.5", + "code": [ + { + "code": "56018004", + "display": "Wheezing", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Wheezing", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.5.6", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.6", + "code": [ + { + "code": "71412-1", + "display": "Gastrointestinal System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Gastrointestinal", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.1", + "code": [ + { + "code": "399122003", + "display": "Swallowing problem", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Swallowing problem", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.2", + "code": [ + { + "code": "21522001", + "display": "Abdominal pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Abdominal pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.3", + "code": [ + { + "code": "16331000", + "display": "Heartburn", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Heartburn", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.4", + "code": [ + { + "code": "422587007", + "display": "Nausea", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Nausea", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.5", + "code": [ + { + "code": "422400008", + "display": "Vomiting", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Vomiting", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.6", + "code": [ + { + "code": "8765009", + "display": "Hematemesis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hematemesis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.7", + "code": [ + { + "code": "14760008", + "display": "Constipation", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Constipation", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.8", + "code": [ + { + "code": "62315008", + "display": "Diarrhea", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Diarrhea", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.9", + "code": [ + { + "code": "2901004", + "display": "Melena", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Melena", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.10", + "code": [ + { + "code": "405729008", + "display": "Blood in stool", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Blood in stool", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.11", + "code": [ + { + "code": "40845000", + "display": "Ulcer", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Ulcer", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.12", + "code": [ + { + "code": "18165001", + "display": "Jaundice", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Jaundice", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.6.13", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.7", + "code": [ + { + "code": "71413-9", + "display": "Genitourinary", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Genitourinary System", + "item": [ + { + "linkId": "ROS.7.1", + "type": "group", + "text": "Urination", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.1", + "code": [ + { + "code": "162116003", + "display": "Increased frequency", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Increased frequency", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.2", + "code": [ + { + "code": "75088002", + "display": "Urgency", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Urgency", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.3", + "code": [ + { + "code": "5972002", + "display": "Hesitancy", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hesitancy", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.4", + "code": [ + { + "code": "48340000", + "display": "Incontinence", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Incontinence", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.5", + "code": [ + { + "code": "49650001", + "display": "Dysuria", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Dysuria", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.6", + "code": [ + { + "code": "28442001", + "display": "Polyuria", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Polyuria", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.7", + "code": [ + { + "code": "139394000", + "display": "Nocturia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Nocturia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.8", + "code": [ + { + "code": "34436003", + "display": "Hematuria", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hematuria", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.2", + "code": [ + { + "code": "247355005", + "display": "Flank pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Flank pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.7.3", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.8", + "code": [ + { + "code": "71414-7", + "display": "Musculoskeletal", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Musculoskeletal System", + "item": [ + { + "linkId": "ROS.8.1", + "type": "group", + "text": "Joint", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.1", + "code": [ + { + "code": "279069000", + "display": "Pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.2", + "code": [ + { + "code": "300887003", + "display": "Swelling", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Swelling", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.3", + "code": [ + { + "code": "84445001", + "display": "Stiffness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Stiffness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.4", + "code": [ + { + "code": "72704001", + "display": "Fracture", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fracture", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.5", + "code": [ + { + "code": "70733008", + "display": "Range of motion limitation", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Range of motion limitation", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.6", + "code": [ + { + "code": "417893002", + "display": "Deformity", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Deformity", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "linkId": "ROS.8.2", + "type": "group", + "text": "Muscle", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.1", + "code": [ + { + "code": "68962001", + "display": "Pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.2", + "code": [ + { + "code": "82470000", + "display": "Fasciculation", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fasciculation", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.3", + "code": [ + { + "code": "88092000", + "display": "Atrophy", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Atrophy", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.4", + "code": [ + { + "code": "26544005", + "display": "Weakness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weakness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.5", + "code": [ + { + "code": "55300003", + "display": "Cramps", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cramps", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "linkId": "ROS.8.3", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.9", + "code": [ + { + "code": "71415-4", + "display": "Skin", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Skin", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.1", + "code": [ + { + "code": "399912005", + "display": "Pressure ulcer", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pressure ulcer", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.2", + "code": [ + { + "code": "271807003", + "display": "Rash", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Rash", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.7", + "code": [ + { + "code": "43116000", + "display": "Eczema", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Eczema", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.8", + "code": [ + { + "code": "418363000", + "display": "Pruritus", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pruritus", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.3", + "code": [ + { + "code": "247493001", + "display": "Splitting nail", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Splitting nail", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.4", + "code": [ + { + "code": "89704006", + "display": "Pitting nail", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pitting nail", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.5", + "code": [ + { + "code": "278040002", + "display": "Hair loss", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hair loss", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.6", + "code": [ + { + "code": "271607001", + "display": "Excessive hair growth", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Excessive hair growth", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.9.9", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.10", + "code": [ + { + "code": "71416-2", + "display": "Neurologic System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Neurological", + "item": [ + { + "type": "choice", + "code": [ + { + "code": "91175000", + "display": "Seizure", + "system": "http://snomed.info/sct" + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.1", + "text": "Seizure", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.2", + "code": [ + { + "code": "44077006", + "display": "Numbness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Numbness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.3", + "code": [ + { + "code": "62507009", + "display": "Tingling", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tingling", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.4", + "code": [ + { + "code": "55406008", + "display": "Increased pain to touch", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Increased pain to touch", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.5", + "code": [ + { + "code": "279079003", + "display": "Dysesthesia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Dysesthesia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.6", + "code": [ + { + "code": "25064002", + "display": "Headache", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Headache", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.7", + "code": [ + { + "code": "41786007", + "display": "Weakness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weakness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.8", + "code": [ + { + "code": "404640003", + "display": "Dizziness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Dizziness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.9", + "code": [ + { + "code": "271594007", + "display": "Fainting", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fainting", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.10", + "code": [ + { + "code": "44695005", + "display": "Paralysis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Paralysis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.11", + "code": [ + { + "code": "26079004", + "display": "Tremors", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tremors", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.12", + "code": [ + { + "code": "267078001", + "display": "Involuntary movements", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Involuntary movements", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.13", + "code": [ + { + "code": "22631008", + "display": "Unstable gait", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Unstable gait", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.14", + "code": [ + { + "code": "161898004", + "display": "Fall", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fall", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.15", + "code": [ + { + "code": "386807006", + "display": "Impaired memory", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Impaired memory", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "drop-down", + "display": "Drop down" + } + ], + "text": "Drop down" + } + } + ], + "linkId": "ROS.10.17", + "code": [ + { + "code": "26329005", + "display": "Poor concentration", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Poor concentration", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.16", + "code": [ + { + "code": "229683000", + "display": "Speech disorders", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Speech disorders", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.10.18", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.11", + "code": [ + { + "code": "71417-0", + "display": "Psychiatric System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Psychiatric", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.1", + "code": [ + { + "code": "7011001", + "display": "Hallucinations", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hallucinations", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.2", + "code": [ + { + "code": "2073000", + "display": "Delusions", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Delusions", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.3", + "code": [ + { + "code": "366979004", + "display": "Depressed mood", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Depressed mood", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.4", + "code": [ + { + "code": "48694002", + "display": "Anxiety", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Anxiety", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.11.5", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.12", + "code": [ + { + "code": "71418-8", + "display": "Endocrine", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Endocrine", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.1", + "code": [ + { + "code": "69215007", + "display": "Heat intolerance", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Heat intolerance", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.2", + "code": [ + { + "code": "80585000", + "display": "Cold intolerance", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cold intolerance", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.3", + "code": [ + { + "code": "3716002", + "display": "Goiter", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Goiter", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.4", + "code": [ + { + "code": "80182007", + "display": "Menstrual irregularity", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Menstrual irregularity", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.5", + "code": [ + { + "code": "170951000", + "display": "Menopausal symptoms", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Menopausal symptoms", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "group", + "code": [], + "linkId": "ROS.12.6", + "text": "Breast", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.1", + "code": [ + { + "code": "89164003", + "display": "Mass/tumor", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Mass/tumor", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.2", + "code": [ + { + "code": "55222007", + "display": "Tenderness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tenderness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.3", + "code": [ + { + "code": "54302000", + "display": "Nipple discharge", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Nipple discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.4", + "code": [ + { + "code": "4754008", + "display": "Gynecomastia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Gynecomastia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "linkId": "ROS.12.7", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.13", + "code": [ + { + "code": "71419-6", + "display": "Hematologic - Lymphatic System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Hematologic - lymphatic", + "item": [ + { + "linkId": "ROS.13.1", + "type": "group", + "text": "Swollen glands", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.13.1.1", + "code": [ + { + "code": "425061006", + "display": "Neck", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Neck", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.13.1.2", + "code": [ + { + "code": "127189005", + "display": "Axilla", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Axilla", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.13.1.3", + "code": [ + { + "code": "127199000", + "display": "Groin", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Groin", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.2", + "code": [ + { + "code": "79654002", + "display": "Edema", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Edema", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.3", + "code": [ + { + "code": "63491006", + "display": "Claudication", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Claudication", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.4", + "code": [ + { + "code": "128060009", + "display": "Varicose veins", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Varicose veins", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.5", + "code": [ + { + "code": "64156001", + "display": "Thrombophlebitis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Thrombophlebitis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.6", + "code": [ + { + "code": "271737000", + "display": "Anemia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Anemia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.7", + "code": [ + { + "code": "125667009", + "display": "Bruising", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Bruising", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.8", + "code": [ + { + "code": "64779008", + "display": "Bleeding disorder", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Bleeding disorder", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.9", + "code": [ + { + "code": "95344007", + "display": "Lower extremity ulcer", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Lower extremity ulcer", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.13.10", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.14", + "code": [ + { + "code": "71420-4", + "display": "Allergic/immunologic", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Allergic/immunologic", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.14.1", + "code": [ + { + "code": "247472004", + "display": "Hives", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hives", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.14.2", + "code": [ + { + "code": "39579001", + "display": "Anaphylaxis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Anaphylaxis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.14.3", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.15", + "type": "display", + "text": "A review of systems is an inventory of body systems obtained through a series of questions seeking to identify signs and/or symptoms which the patient may be experiencing or has experienced", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "text": "Help-Button", + "coding": [ + { + "code": "help", + "display": "Help-Button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/__tests__/vsac_cache.test.js b/src/__tests__/vsac_cache.test.js new file mode 100644 index 00000000..2d60726c --- /dev/null +++ b/src/__tests__/vsac_cache.test.js @@ -0,0 +1,44 @@ + +import VsacCache from '../lib/vsac_cache'; +import library from './fixtures/library.json'; +import questionnaire from './fixtures/questionnaire.json'; +describe('VsacCache', () => { + + let client = new VsacCache('./tmp',process.env.apiKey); + beforeEach(() => { + jest.resetModules(); + + }); + + // need to mock the server endpoints to we do not require hitting + // the server for CI testing with someones api credentials + + + test('should be able to cache valuesets in Library Resources', async () => { + expect(getCacheCount()).toEqual(0); + await client.cacheLibrary(library); + expect(getCacheCount()).toEqual(0); + }); + + test('should be able to cache valuesets in Questionnaire Resources', async () => { + expect(getCacheCount()).toEqual(0); + await client.cacheLibrary(questionnaire); + expect(getCacheCount()).toEqual(0); + }); + + + test('should be able to force reload of valuesets', async () => { + expect(getCacheCount()).toEqual(0); + await client.cacheLibrary(library, true); + expect(getCacheCount()).toEqual(0); + }); + + test('should be not load valuesets already cached', async () => { + expect(getCacheCount()).toEqual(0); + await client.cacheLibrary(library, true); + expect(getCacheCount()).toEqual(0); + await client.cacheLibrary(library, true); + }); + + +}); \ No newline at end of file diff --git a/src/lib/vsac_cache.ts b/src/lib/vsac_cache.ts new file mode 100644 index 00000000..7142f331 --- /dev/null +++ b/src/lib/vsac_cache.ts @@ -0,0 +1,75 @@ +import axios from 'axios'; +import fhirpath from 'fhirpath'; +import fs from 'fs'; +class VsacCache { + + cacheDir: string; + apiKey: string; + baseUrl: string; + + constructor(cacheDir: string, apiKey: string, baseUrl = 'https://cts.nlm.nih.gov/fhir/') { + this.cacheDir = cacheDir; + this.apiKey = apiKey; + this.baseUrl = baseUrl; + } + + + async cacheLibrary(library: any, forceReload = false) { + const valueSets = fhirpath.evaluate(library, 'Library.dataRequirements.codeFilter.valueset'); + valueSets.forEach(async vs => { + await this.downloadAndCacheValueset(vs, forceReload); + }); + } + + async cacheQuestionnaireItems(obj: any, forceReload = false) { + const items = obj.item; + items.forEach(async (item: any) => { + if (item.answerValueSet) { + this.downloadAndCacheValueset(item.answerValueSet, forceReload); + } + if (item.item) { + this.cacheQuestionnaireItems(item, forceReload); + } + }); + + } + + async downloadAndCacheValueset(connonical: string, forceReload = false) { + console.log('fetching vs ' + connonical); + if (forceReload || !this.isCached(connonical)) { + const vs = this.downloadValueset(connonical); + this.storeValueSet(vs); + return vs; + } + } + + + async downloadValueset(connonical: string) { + console.log('fetching vs ' + connonical); + const headers: any = {}; + // this will only add headers to vsac urls + if (connonical.startsWith(this.baseUrl)) { + headers['AUTHORIZATION'] = Buffer.from(':' + this.apiKey).toString('base64'); + } + // this will try to download valuesets that are not in vsac as well based on the + // connonical url passed in. + return await axios.get(connonical, { + headers: headers + }); + } + + async isCached(url: string) { + const id = ''; + const fileName = `${this.cacheDir}/${id}`; + return fs.existsSync(fileName); + } + + async storeValueSet(vs: any) { + if (vs && vs.id) { + const fileName = `${this.cacheDir}/${vs.id}`; + fs.writeFileSync(fileName, JSON.stringify(vs)); + } + } +} + +export default VsacCache; \ No newline at end of file From 6af787b5a96afbad7e6cf45c8883c5984bb995f2 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Tue, 6 Dec 2022 16:50:07 -0500 Subject: [PATCH 28/83] WIP: adding functionality from cds-hooks branch --- package.json | 5 + src/__tests__/vsac_cache.test.js | 44 ----- src/{ => lib}/__tests__/fixtures/library.json | 0 .../__tests__/fixtures/questionnaire.json | 0 src/lib/__tests__/vsac_cache.test.ts | 86 +++++++++ src/lib/vsac_cache.ts | 165 +++++++++++++++--- 6 files changed, 231 insertions(+), 69 deletions(-) delete mode 100644 src/__tests__/vsac_cache.test.js rename src/{ => lib}/__tests__/fixtures/library.json (100%) rename src/{ => lib}/__tests__/fixtures/questionnaire.json (100%) create mode 100644 src/lib/__tests__/vsac_cache.test.ts diff --git a/package.json b/package.json index dafb56ff..ab35f761 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,9 @@ "url": "git+ssh://git@bitbucket.org/asymmetrik/carejourney-cds.git" }, "jest": { + "moduleNameMapper": { + "axios": "axios/dist/node/axios.cjs" + }, "preset": "ts-jest", "testEnvironment": "node", "transform": { @@ -51,10 +54,12 @@ "dependencies": { "@projecttacoma/node-fhir-server-core": "^2.2.8", "@types/fhir": "^0.0.35", + "axios": "^1.2.1", "body-parser": "^1.19.0", "conventional-changelog-cli": "^2.0.34", "cors": "^2.8.5", "express": "^4.17.1", + "fhirpath": "^3.2.0", "lodash": "^4.17.19", "moment": "^2.24.0", "moment-timezone": "^0.5.40", diff --git a/src/__tests__/vsac_cache.test.js b/src/__tests__/vsac_cache.test.js deleted file mode 100644 index 2d60726c..00000000 --- a/src/__tests__/vsac_cache.test.js +++ /dev/null @@ -1,44 +0,0 @@ - -import VsacCache from '../lib/vsac_cache'; -import library from './fixtures/library.json'; -import questionnaire from './fixtures/questionnaire.json'; -describe('VsacCache', () => { - - let client = new VsacCache('./tmp',process.env.apiKey); - beforeEach(() => { - jest.resetModules(); - - }); - - // need to mock the server endpoints to we do not require hitting - // the server for CI testing with someones api credentials - - - test('should be able to cache valuesets in Library Resources', async () => { - expect(getCacheCount()).toEqual(0); - await client.cacheLibrary(library); - expect(getCacheCount()).toEqual(0); - }); - - test('should be able to cache valuesets in Questionnaire Resources', async () => { - expect(getCacheCount()).toEqual(0); - await client.cacheLibrary(questionnaire); - expect(getCacheCount()).toEqual(0); - }); - - - test('should be able to force reload of valuesets', async () => { - expect(getCacheCount()).toEqual(0); - await client.cacheLibrary(library, true); - expect(getCacheCount()).toEqual(0); - }); - - test('should be not load valuesets already cached', async () => { - expect(getCacheCount()).toEqual(0); - await client.cacheLibrary(library, true); - expect(getCacheCount()).toEqual(0); - await client.cacheLibrary(library, true); - }); - - -}); \ No newline at end of file diff --git a/src/__tests__/fixtures/library.json b/src/lib/__tests__/fixtures/library.json similarity index 100% rename from src/__tests__/fixtures/library.json rename to src/lib/__tests__/fixtures/library.json diff --git a/src/__tests__/fixtures/questionnaire.json b/src/lib/__tests__/fixtures/questionnaire.json similarity index 100% rename from src/__tests__/fixtures/questionnaire.json rename to src/lib/__tests__/fixtures/questionnaire.json diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts new file mode 100644 index 00000000..d224cf1a --- /dev/null +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -0,0 +1,86 @@ + +import VsacCache from '../vsac_cache'; +import library from './fixtures/library.json'; +import questionnaire from './fixtures/questionnaire.json'; +describe('VsacCache', () => { + + let client = new VsacCache('./tmp', process.env["VSAC_API_KEY"] ?? "2c1d55c3-3484-4902-b645-25f3a4974ce6"); + beforeEach(() => { + jest.resetModules(); + }); + + // need to mock the server endpoints to we do not require hitting + // the server for CI testing with someones api credentials + + test('should be able to collect valueset references from Library Resources', async () => { + let valueSets = client.collectLibraryValuesets(library); + expect(valueSets).toEqual(new Set(["http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.85", + "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35"])); + }); + + test('should be able to collect valueset references from Questionnaire Resources', async () => { + let valueSets = client.collectQuestionnaireValuesets(questionnaire); + expect(valueSets).toEqual(new Set(["http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked"])); + }); + + test('should be able to cache valuesets in Library Resources', async () => { + client.clearCache(); + const valueSets = client.collectLibraryValuesets(library); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeFalsy(); + }); + + await client.cacheLibrary(library); + + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeTruthy(); + }); + }); + + test('should be able to cache valuesets in Questionnaire Resources', async () => { + client.clearCache(); + const valueSets = client.collectQuestionnaireValuesets(questionnaire); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeFalsy(); + }); + + await client.cacheQuestionnaireItems(questionnaire); + + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeTruthy(); + }); + }); + + + test('should be not load valuesets already cached unless forced', async () => { + client.clearCache(); + const valueSets = client.collectQuestionnaireValuesets(questionnaire); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeFalsy(); + }); + + let cached = await client.cacheQuestionnaireItems(questionnaire); + + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeTruthy(); + }); + + const vs = valueSets.values().next().value; + let update = await client.downloadAndCacheValueset(vs); + expect(update.get("cached")).toBeFalsy(); + + update = await client.downloadAndCacheValueset(vs, true); + expect(update.get("cached")).toBeTruthy(); + + }); + + test("Should be able to handle errors downloading valuesets", async () => { + client.clearCache(); + const err = await client.downloadAndCacheValueset("http://localhost:9999/vs/1234"); + expect(err.get("error")).toBeDefined(); + + }) + + + +}); \ No newline at end of file diff --git a/src/lib/vsac_cache.ts b/src/lib/vsac_cache.ts index 7142f331..06fff3ad 100644 --- a/src/lib/vsac_cache.ts +++ b/src/lib/vsac_cache.ts @@ -1,73 +1,188 @@ import axios from 'axios'; import fhirpath from 'fhirpath'; import fs from 'fs'; +import { stringify } from 'querystring'; + class VsacCache { cacheDir: string; apiKey: string; baseUrl: string; - constructor(cacheDir: string, apiKey: string, baseUrl = 'https://cts.nlm.nih.gov/fhir/') { + constructor(cacheDir: string, apiKey: string, baseUrl = 'http://cts.nlm.nih.gov/fhir/') { this.cacheDir = cacheDir; this.apiKey = apiKey; this.baseUrl = baseUrl; } + /** + * + * @param library The library to cache valuesets for + * @param forceReload flag to force reaching valuesets already cached + * @returns Map of caching results url: {valueSet, error, cached} + */ async cacheLibrary(library: any, forceReload = false) { - const valueSets = fhirpath.evaluate(library, 'Library.dataRequirements.codeFilter.valueset'); - valueSets.forEach(async vs => { - await this.downloadAndCacheValueset(vs, forceReload); - }); + const valueSets = this.collectLibraryValuesets(library); + return await this.cacheValuesets(valueSets); } + /** + * + * @param obj Questionnaire|item object to cache valuesets for + * @param forceReload flag to force reaching valuesets already cached + * @returns Map of caching results url: {valueSet, error, cached} + */ + async cacheQuestionnaireItems(obj: any, forceReload = false) { + const valueSets = this.collectQuestionnaireValuesets(obj); + return await this.cacheValuesets(valueSets); + } + + /** + * + * @param library The fhir Library to download valuesets from + * @returns a Set that includes all of the valueset urls found in the Library + */ + collectLibraryValuesets(library: any) { + // ensure only unique values + return new Set(fhirpath.evaluate(library, 'Library.dataRequirement.codeFilter.valueSet')); + } + + /** + * + * @param obj the Questionnaire object or item to collect answerValueSet urls from + * @returns a Set that includes all of the valuesets in the passed object. This returns values for sub items as well + */ + collectQuestionnaireValuesets(obj: any) { const items = obj.item; + let valuesets = new Set() items.forEach(async (item: any) => { if (item.answerValueSet) { - this.downloadAndCacheValueset(item.answerValueSet, forceReload); + valuesets.add(item.answerValueSet) } if (item.item) { - this.cacheQuestionnaireItems(item, forceReload); + valuesets = new Set([...valuesets, ...this.collectQuestionnaireValuesets(item)]); } }); + // ensure only unique values + return valuesets; + } + /** + * + * @param valueSets The valusets to cache + * @param forceReload flag to force downloading and caching of the valuesets + * @returns a Map with the return values from caching the valuesets. + */ + async cacheValuesets(valueSets: Set | [], forceReload = false) { + const values = Array.from(valueSets) + const results = new Map(); + return await Promise.all(values.map(async vs => { + return results.set(vs, await this.downloadAndCacheValueset(vs, forceReload)); + })); } + /** + * + * @param connonical the Url to download + * @param forceReload flag to force recaching already cached values + * @returns Map that contains results url: {cached, valueSet, error} + */ async downloadAndCacheValueset(connonical: string, forceReload = false) { - console.log('fetching vs ' + connonical); - if (forceReload || !this.isCached(connonical)) { - const vs = this.downloadValueset(connonical); - this.storeValueSet(vs); + if (forceReload || !(this.isCached(connonical))) { + const vs = await this.downloadValueset(connonical); + if (vs.get("error")) { + console.log("Error Downloading ", connonical) + console.log(vs.get("error").message); + } + else if (vs.get("valueSet")) { + this.storeValueSet(connonical, vs.get("valueSet")); + vs.set("cached", true); + } return vs; } + const ret = new Map(); + ret.set("cached", false); + return ret; } - + /** + * + * @param connonical the url to download + * @returns Map that contains results url: {valueset, error} + */ async downloadValueset(connonical: string) { - console.log('fetching vs ' + connonical); - const headers: any = {}; + const retValue = new Map(); + const headers: any = { + "Accept": "application/json+fhir" + }; // this will only add headers to vsac urls if (connonical.startsWith(this.baseUrl)) { - headers['AUTHORIZATION'] = Buffer.from(':' + this.apiKey).toString('base64'); + headers['Authorization'] = "Basic " + Buffer.from(':' + this.apiKey).toString('base64'); } // this will try to download valuesets that are not in vsac as well based on the // connonical url passed in. - return await axios.get(connonical, { - headers: headers - }); + let url = connonical; + if (connonical.startsWith(this.baseUrl)) { + url = url + "/$expand"; + } + // axios cleanup + await process.nextTick(() => { }); + + try { + console.log("Downloading vs " + url) + const vs = await axios.get(url, { + headers: headers + }); + retValue.set("valueSet", vs.data); + } catch (error: any) { + retValue.set("error", error) + } + return retValue; } - async isCached(url: string) { - const id = ''; - const fileName = `${this.cacheDir}/${id}`; + /** + * + * @param connonical url to test if already cached + * @returns true or false + */ + isCached(connonical: string) { + const fileName = this.getCacheName(connonical) return fs.existsSync(fileName); } - async storeValueSet(vs: any) { - if (vs && vs.id) { - const fileName = `${this.cacheDir}/${vs.id}`; - fs.writeFileSync(fileName, JSON.stringify(vs)); + /** + * + * @param connonical url key to cache + * @param vs the valueset to cache + */ + storeValueSet(connonical: string, vs: any) { + const fileName = this.getCacheName(connonical) + fs.writeFileSync(fileName, JSON.stringify(vs)); + } + + /** + * + * @param connonical the url to cache + * @returns identifier used to cache the vs + */ + getCacheName(connonical: string) { + const url = new URL(connonical); + let parts = url.pathname.split("/") + return `${this.cacheDir}/${parts[parts.length - 1]}`; + } + + /** + * Clear all of the cached valuesets + */ + clearCache() { + try { + let files = fs.readdirSync(this.cacheDir) + files.map(file => fs.unlinkSync(`${this.cacheDir}/${file}`)) + + } catch (err) { + console.log(err); } } } From 832887635d1f845f5ad2eac0f8b1e24bf9e1dabd Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Fri, 9 Dec 2022 13:13:14 -0500 Subject: [PATCH 29/83] Restructured caching, added flag to cache utility to allow/disallow downloading of valuesets from other servers (this bypasses adding auth header). Added mocks to tests and updated tests --- .gitignore | 3 +- package.json | 2 + src/lib/__tests__/fixtures/valueSet.json | 1 + src/lib/__tests__/vsac_cache.test.ts | 104 +++++++++++++++++------ src/lib/vsac_cache.ts | 28 +++--- 5 files changed, 102 insertions(+), 36 deletions(-) create mode 100644 src/lib/__tests__/fixtures/valueSet.json diff --git a/.gitignore b/.gitignore index a56b10b3..409a8867 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ COVERAGE/ logs/ node_modules/ dist/ -.idea/ \ No newline at end of file +.idea/ +.DS_Store \ No newline at end of file diff --git a/package.json b/package.json index ab35f761..6280c6d4 100644 --- a/package.json +++ b/package.json @@ -80,11 +80,13 @@ "@types/nodemon": "^1.19.2", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", + "axios-mock-adapter": "^1.21.2", "eslint": "^8.28.0", "eslint-config-prettier": "^6.10.1", "jest": "^27.4.5", "jest-extended": "^1.2.0", "json-diff": "^0.9.0", + "nock": "^13.2.9", "nodemon": "^2.0.20", "prettier": "^2.0.5", "ts-jest": "^27.1.2", diff --git a/src/lib/__tests__/fixtures/valueSet.json b/src/lib/__tests__/fixtures/valueSet.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/lib/__tests__/fixtures/valueSet.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts index d224cf1a..36c5f399 100644 --- a/src/lib/__tests__/vsac_cache.test.ts +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -2,10 +2,15 @@ import VsacCache from '../vsac_cache'; import library from './fixtures/library.json'; import questionnaire from './fixtures/questionnaire.json'; +import valueSet from './fixtures/valueSet.json' +import axios from "axios"; +import nock from 'nock' + describe('VsacCache', () => { + let client = new VsacCache('./tmp', "test_key"); - let client = new VsacCache('./tmp', process.env["VSAC_API_KEY"] ?? "2c1d55c3-3484-4902-b645-25f3a4974ce6"); beforeEach(() => { + client.onlyVsac = false; jest.resetModules(); }); @@ -18,66 +23,115 @@ describe('VsacCache', () => { "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35"])); }); + test('should be able to collect valueset references from Questionnaire Resources', async () => { let valueSets = client.collectQuestionnaireValuesets(questionnaire); expect(valueSets).toEqual(new Set(["http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked"])); }); + test('should be able to cache valuesets in Library Resources', async () => { client.clearCache(); + + const mockRequest = nock('http://cts.nlm.nih.gov/fhir'); + console.log('Bearer ' + Buffer.from(":test_key").toString('base64')); + + mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.85/$expand").reply(200, JSON.stringify(valueSet)); + mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand").reply(200, JSON.stringify(valueSet)); + const valueSets = client.collectLibraryValuesets(library); valueSets.forEach(vs => { expect(client.isCached(vs)).toBeFalsy(); }); - await client.cacheLibrary(library); + try { + await client.cacheLibrary(library); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeTruthy(); + }); + } finally { + mockRequest.done(); + } - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeTruthy(); - }); }); test('should be able to cache valuesets in Questionnaire Resources', async () => { client.clearCache(); + const mockRequest = nock('http://terminology.hl7.org/'); + console.log('Bearer ' + Buffer.from(":test_key").toString('base64')); + mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); + const valueSets = client.collectQuestionnaireValuesets(questionnaire); valueSets.forEach(vs => { expect(client.isCached(vs)).toBeFalsy(); }); - await client.cacheQuestionnaireItems(questionnaire); - - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeTruthy(); - }); + try { + await client.cacheQuestionnaireItems(questionnaire); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeTruthy(); + }); + } finally { + mockRequest.done(); + } }); test('should be not load valuesets already cached unless forced', async () => { client.clearCache(); - const valueSets = client.collectQuestionnaireValuesets(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeFalsy(); - }); + let mockRequest = nock('http://terminology.hl7.org/'); + mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); + try { + const valueSets = client.collectQuestionnaireValuesets(questionnaire); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeFalsy(); + }); - let cached = await client.cacheQuestionnaireItems(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeTruthy(); - }); + let cached = await client.cacheQuestionnaireItems(questionnaire); + + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeTruthy(); + }); + + const vs = valueSets.values().next().value; + let update = await client.downloadAndCacheValueset(vs); + expect(update.get("cached")).toBeFalsy(); + + mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); + update = await client.downloadAndCacheValueset(vs, true); + + expect(update.get("cached")).toBeTruthy(); + } finally { + mockRequest.done(); + } - const vs = valueSets.values().next().value; - let update = await client.downloadAndCacheValueset(vs); - expect(update.get("cached")).toBeFalsy(); + }); + + test('should be able to handle errors downloading valuesests', async () => { + client.clearCache(); + const mockRequest = nock('http://terminology.hl7.org/'); + console.log('Bearer ' + Buffer.from(":test_key").toString('base64')); + mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(404, ""); - update = await client.downloadAndCacheValueset(vs, true); - expect(update.get("cached")).toBeTruthy(); + const valueSets = client.collectQuestionnaireValuesets(questionnaire); + valueSets.forEach(vs => { + expect(client.isCached(vs)).toBeFalsy(); + }); + try { + const err = await client.downloadAndCacheValueset("http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked"); + expect(err.get("error")).toBeDefined() + } finally { + mockRequest.done(); + } }); - test("Should be able to handle errors downloading valuesets", async () => { + test("Should not attempt tp download non-vsac valuesets if configured to do so", async () => { client.clearCache(); + client.onlyVsac = true; const err = await client.downloadAndCacheValueset("http://localhost:9999/vs/1234"); - expect(err.get("error")).toBeDefined(); + expect(err.get("error")).toEqual("Cannot download non vsac valuesets: http://localhost:9999/vs/1234") }) diff --git a/src/lib/vsac_cache.ts b/src/lib/vsac_cache.ts index 06fff3ad..91fa9b0d 100644 --- a/src/lib/vsac_cache.ts +++ b/src/lib/vsac_cache.ts @@ -8,11 +8,13 @@ class VsacCache { cacheDir: string; apiKey: string; baseUrl: string; + onlyVsac: boolean; - constructor(cacheDir: string, apiKey: string, baseUrl = 'http://cts.nlm.nih.gov/fhir/') { + constructor(cacheDir: string, apiKey: string, baseUrl = 'http://cts.nlm.nih.gov/fhir/', onlyVsac = false) { this.cacheDir = cacheDir; this.apiKey = apiKey; this.baseUrl = baseUrl; + this.onlyVsac = onlyVsac; } @@ -117,9 +119,11 @@ class VsacCache { const headers: any = { "Accept": "application/json+fhir" }; + let isVsac = false; // this will only add headers to vsac urls if (connonical.startsWith(this.baseUrl)) { headers['Authorization'] = "Basic " + Buffer.from(':' + this.apiKey).toString('base64'); + isVsac = true; } // this will try to download valuesets that are not in vsac as well based on the // connonical url passed in. @@ -129,16 +133,20 @@ class VsacCache { } // axios cleanup await process.nextTick(() => { }); - - try { - console.log("Downloading vs " + url) - const vs = await axios.get(url, { - headers: headers - }); - retValue.set("valueSet", vs.data); - } catch (error: any) { - retValue.set("error", error) + if ((this.onlyVsac && isVsac) || !this.onlyVsac) { + try { + console.log("Downloading vs " + url) + const vs = await axios.get(url, { + headers: headers + }); + retValue.set("valueSet", vs.data); + } catch (error: any) { + retValue.set("error", error) + } + }else{ + retValue.set("error", "Cannot download non vsac valuesets: "+ url); } + return retValue; } From d3a9971f56c917b86dc92ef2733742b69cd53bdc Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Fri, 9 Dec 2022 13:28:21 -0500 Subject: [PATCH 30/83] removing loging statements and move cache clearing to beforeAll funciton --- src/lib/__tests__/vsac_cache.test.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts index 36c5f399..120635ba 100644 --- a/src/lib/__tests__/vsac_cache.test.ts +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -10,6 +10,7 @@ describe('VsacCache', () => { let client = new VsacCache('./tmp', "test_key"); beforeEach(() => { + client.clearCache(); client.onlyVsac = false; jest.resetModules(); }); @@ -31,10 +32,9 @@ describe('VsacCache', () => { test('should be able to cache valuesets in Library Resources', async () => { - client.clearCache(); + const mockRequest = nock('http://cts.nlm.nih.gov/fhir'); - console.log('Bearer ' + Buffer.from(":test_key").toString('base64')); mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.85/$expand").reply(200, JSON.stringify(valueSet)); mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand").reply(200, JSON.stringify(valueSet)); @@ -56,9 +56,8 @@ describe('VsacCache', () => { }); test('should be able to cache valuesets in Questionnaire Resources', async () => { - client.clearCache(); + const mockRequest = nock('http://terminology.hl7.org/'); - console.log('Bearer ' + Buffer.from(":test_key").toString('base64')); mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); const valueSets = client.collectQuestionnaireValuesets(questionnaire); @@ -78,7 +77,7 @@ describe('VsacCache', () => { test('should be not load valuesets already cached unless forced', async () => { - client.clearCache(); + let mockRequest = nock('http://terminology.hl7.org/'); mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); try { @@ -109,9 +108,8 @@ describe('VsacCache', () => { }); test('should be able to handle errors downloading valuesests', async () => { - client.clearCache(); + const mockRequest = nock('http://terminology.hl7.org/'); - console.log('Bearer ' + Buffer.from(":test_key").toString('base64')); mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(404, ""); const valueSets = client.collectQuestionnaireValuesets(questionnaire); @@ -128,7 +126,6 @@ describe('VsacCache', () => { }); test("Should not attempt tp download non-vsac valuesets if configured to do so", async () => { - client.clearCache(); client.onlyVsac = true; const err = await client.downloadAndCacheValueset("http://localhost:9999/vs/1234"); expect(err.get("error")).toEqual("Cannot download non vsac valuesets: http://localhost:9999/vs/1234") From d0b8d3882947cf0e859a260e1e0d75cec564339e Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Tue, 10 Jan 2023 19:13:30 -0500 Subject: [PATCH 31/83] Updates based on review. Remove extra error log and load fhir resources differently. --- src/fhir/utilities.ts | 175 +++++++++++++++++++++++++++++++++--------- src/main.ts | 1 - 2 files changed, 139 insertions(+), 37 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 79fc75ee..6c4955f9 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -122,53 +122,156 @@ export class FhirUtilities { }); } + static loadFile(filePath: string, file: any) { + const extension = re.exec(filePath); + if (extension) { + if (extension[1].toLowerCase() === 'json') { + if (file !== 'TopicMetadata.json') { + console.log("'%s' is a JSON Resource file.", filePath); + fs.readFile(filePath, 'utf8', (err: any, jsonString: string) => { + if (err) { + console.error('Failed to read file:', err); + return; + } + try { + const resource = JSON.parse(jsonString); + FhirUtilities.store( + resource, + function () { + return; + }, + function () { + return; + } + ); + } catch (parseError: any) { + console.warn('Failed to parse json file: ' + filePath); + } + }); + } + } + } + } + static loadResources(resourcePath: string) { console.log('Loading FHIR Resources from: ' + resourcePath); - // Loop through all the files in the temp directory - fs.readdir(resourcePath, function (err: any, files: any) { - if (err) { - console.error('Could not list the directory.', err); + // Loop through all the files in the directory looking for folders + fs.readdir(resourcePath, function (rootError: any, rootFiles: any) { + if (rootError) { + console.error('Could not list the directory.', rootError); process.exit(1); } - files.forEach(function (file: any) { - // Make one pass and make the file complete - const filePath = path.join(resourcePath, file); + rootFiles.forEach(function (rootFile: any) { + const rootFilePath = path.join(resourcePath, rootFile); - fs.stat(filePath, function (error: any, stat: any) { - if (error) { - console.error('Error getting file statistics.', error); + fs.stat(rootFilePath, function (rootFileError: any, rootFileStat: any) { + if (rootFileError) { + console.error('Error getting root folder file statistics.', rootFileError); return; } - if (stat.isFile()) { - const extension = re.exec(filePath); - if (extension) { - if (extension[1].toLowerCase() === 'json') { - if (file !== 'TopicMetadata.json') { - console.log("'%s' is a JSON Resource file.", filePath); - fs.readFile(filePath, 'utf8', (err: any, jsonString: string) => { - if (err) { - console.error('Failed to read file:', err); - return; - } - const resource = JSON.parse(jsonString); - FhirUtilities.store( - resource, - function () { - return; - }, - function () { - return; - } - ); - }); - } + if (rootFileStat.isDirectory()) { + // loop through all the fhir versions looking for R4 + fs.readdir(rootFilePath, function (rulesErr: any, rulesFiles: any) { + if (rulesErr) { + console.error('Error getting rule folder file list.', rulesErr); } - } - } else if (stat.isDirectory()) { - FhirUtilities.loadResources(filePath); + + rulesFiles.forEach(function (rulesFile: any) { + const rulesFilePath = path.join(rootFilePath, rulesFile); + + fs.stat(rulesFilePath, function (rulesFileError: any, rulesFileStat: any) { + if (rulesFileError) { + console.error('Error getting rules folder file statistics.', rulesFileError); + return; + } + + if (rulesFileStat.isDirectory()) { + // only process the R4 directory + if (rulesFile === 'R4') { + fs.readdir( + rulesFilePath, + function (fhirVersionErr: any, fhirVersionFiles: any) { + if (fhirVersionErr) { + console.error('Error getting fhir folder file list.', fhirVersionErr); + return; + } + + // loop through all the folders in the R4 folder + fhirVersionFiles.forEach(function (fhirVersionFile: any) { + const fhirVersionFilePath = path.join(rulesFilePath, fhirVersionFile); + + fs.stat( + fhirVersionFilePath, + function (fhirVersionFileError: any, fhirVersionFileStat: any) { + if (fhirVersionFileError) { + console.error( + 'Error getting fhir version file statistics.', + fhirVersionFileError + ); + return; + } + + if (fhirVersionFileStat.isDirectory()) { + if (fhirVersionFile === 'resources') { + console.log(fhirVersionFilePath); + + fs.readdir( + fhirVersionFilePath, + function (resourceFilesErr: any, resourceFiles: any) { + if (resourceFilesErr) { + console.error( + 'Error getting resource folder file list.', + resourceFilesErr + ); + return; + } + + resourceFiles.forEach(function (resourceFile: any) { + const resourceFilePath = path.join( + fhirVersionFilePath, + resourceFile + ); + + fs.stat( + resourceFilePath, + function ( + resourceFileError: any, + resourceFileStat: any + ) { + if (resourceFileError) { + console.error( + 'Error getting resource file statistics.', + resourceFileError + ); + return; + } + + if (resourceFileStat.isFile()) { + FhirUtilities.loadFile( + resourceFilePath, + resourceFile + ); + } + } + ); + }); + } + ); + } + } + } + ); + }); + } + ); + } + } + }); + }); + }); } }); }); diff --git a/src/main.ts b/src/main.ts index 9a982113..f47263db 100644 --- a/src/main.ts +++ b/src/main.ts @@ -36,7 +36,6 @@ export default async function main() { await dbClient.connect(); } catch (dbErr: any) { console.error(dbErr.message); - console.error(); process.exit(1); } Globals.databaseClient = dbClient.client; From 41ca07960772cd1209ab55d2e8e0d208ace0aaca Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Tue, 17 Jan 2023 11:18:59 -0500 Subject: [PATCH 32/83] Fix UUID generation. --- package.json | 2 ++ src/fhir/utilities.ts | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index dafb56ff..8128a496 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "mongodb": "^4.12.1", "morgan": "^1.9.1", "tingodb": "^0.6.1", + "uuid": "^9.0.0", "var": "^0.4.0", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.2.1" @@ -73,6 +74,7 @@ "@types/morgan": "^1.9.3", "@types/node": "^18.11.9", "@types/nodemon": "^1.19.2", + "@types/uuid": "^9.0.0", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "eslint": "^8.28.0", diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 6c4955f9..5d86e9bd 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -1,6 +1,7 @@ import { resolveSchema } from '@projecttacoma/node-fhir-server-core'; import * as moment from 'moment'; import 'moment-timezone'; +import { v1 as uuidv1 } from 'uuid'; import constants from '../constants'; import { Globals } from '../globals'; @@ -42,7 +43,7 @@ export class FhirUtilities { let id = ''; if (!resource.id) { // If no resource ID was provided, generate one. - id = self.crypto.randomUUID(); + id = uuidv1(); } else { id = resource.id; } From f2aee3d13b99752ab7cf38f2868d5782fa092e56 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Wed, 18 Jan 2023 16:32:56 -0500 Subject: [PATCH 33/83] merging fhir-server code base and updating to use fhir-server db. Some functionality is in a state of limbo until we move to mongo. Mainly the ability to force reloading of currently cached valuesets. --- src/fhir/utilities.ts | 17 ++-- src/lib/TingoDatabase.ts | 2 +- src/lib/__tests__/fixtures/valueSet.json | 2 +- src/lib/__tests__/vsac_cache.test.ts | 52 ++++++---- src/lib/vsac_cache.ts | 116 ++++++++++++++++------- 5 files changed, 126 insertions(+), 63 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 6c4955f9..43656512 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -7,6 +7,7 @@ import { Globals } from '../globals'; import * as path from 'path'; import * as fs from 'fs'; import * as process from 'process'; +import crypto from "crypto"; const re = /(?:\.([^.]+))?$/; @@ -35,6 +36,7 @@ export class FhirUtilities { return resolveSchema(baseVersion, 'Meta'); }; + static async store(resource: any, resolve: any, reject: any, baseVersion = '4_0_0') { const db = Globals.database; @@ -42,7 +44,7 @@ export class FhirUtilities { let id = ''; if (!resource.id) { // If no resource ID was provided, generate one. - id = self.crypto.randomUUID(); + id = crypto.randomUUID(); } else { id = resource.id; } @@ -76,6 +78,7 @@ export class FhirUtilities { } const Resource = resolveSchema(baseVersion, resource.resourceType); + const fhirResource = new Resource(resource); // Create the resource's metadata @@ -86,7 +89,7 @@ export class FhirUtilities { }); if (collectionString === '') { - return reject(' Unsupported FHIR Resource Type'); + reject(' Unsupported FHIR Resource Type'); } const collection = db.collection(collectionString); @@ -103,7 +106,8 @@ export class FhirUtilities { collection.insert(doc, (err: any) => { if (err) { console.log(' Error with %s.create: ', resource.resourceType, err.message); - return reject(err); + reject(err); + return; } else { console.log(' Successfully added ' + resource.resourceType + ' -- ' + id); } @@ -112,12 +116,13 @@ export class FhirUtilities { const history_collection = db.collection(historyCollectionString); // Insert our patient record to history but don't assign _id - return history_collection.insert(history_doc, (err2: any) => { + history_collection.insert(history_doc, (err2: any) => { if (err2) { console.log(' Error with %sHistory.create: ', resource.resourceType, err2.message); - return reject(err2); + reject(err2); + return; } - return resolve({ id: doc.id, resource_version: doc.meta.versionId }); + resolve({ id: doc.id, resource_version: doc.meta.versionId }); }); }); } diff --git a/src/lib/TingoDatabase.ts b/src/lib/TingoDatabase.ts index 9d0a7e08..3f0cd96a 100644 --- a/src/lib/TingoDatabase.ts +++ b/src/lib/TingoDatabase.ts @@ -19,6 +19,6 @@ export class TingoDatabase extends Database { const tingo = new tingodb(); this.database = new tingo.Db(this.location, {}); this.client = ''; - return resolve(this.database); + resolve(this.database); }); } diff --git a/src/lib/__tests__/fixtures/valueSet.json b/src/lib/__tests__/fixtures/valueSet.json index 9e26dfee..a1007b07 100644 --- a/src/lib/__tests__/fixtures/valueSet.json +++ b/src/lib/__tests__/fixtures/valueSet.json @@ -1 +1 @@ -{} \ No newline at end of file +{"resourceType" : "ValueSet"} \ No newline at end of file diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts index 120635ba..d9045342 100644 --- a/src/lib/__tests__/vsac_cache.test.ts +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -3,14 +3,28 @@ import VsacCache from '../vsac_cache'; import library from './fixtures/library.json'; import questionnaire from './fixtures/questionnaire.json'; import valueSet from './fixtures/valueSet.json' -import axios from "axios"; +import fs from 'fs'; import nock from 'nock' +import { TingoDatabase } from '../TingoDatabase'; +import { Globals } from '../../globals'; describe('VsacCache', () => { - let client = new VsacCache('./tmp', "test_key"); - + let client = new VsacCache('./tmp', '2c1d55c3-3484-4902-b645-25f3a4974ce6'); + let dbClient = new TingoDatabase( { + location: './tingo_db', + options: '' + }); + dbClient.connect(); + Globals.databaseClient = dbClient.client; + Globals.database = dbClient.database; + beforeEach(() => { - client.clearCache(); + Globals.database.close(); + fs.rmSync("./tingo_db", { recursive: true, force: true }); + dbClient.connect(); + Globals.databaseClient = dbClient.client; + Globals.database = dbClient.database; + // client.clearCache(); client.onlyVsac = false; jest.resetModules(); }); @@ -40,14 +54,14 @@ describe('VsacCache', () => { mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand").reply(200, JSON.stringify(valueSet)); const valueSets = client.collectLibraryValuesets(library); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeFalsy(); + valueSets.forEach(async vs => { + expect(await client.isCached(vs)).toBeFalsy(); }); try { await client.cacheLibrary(library); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeTruthy(); + valueSets.forEach(async vs => { + expect(await client.isCached(vs)).toBeTruthy(); }); } finally { mockRequest.done(); @@ -61,14 +75,14 @@ describe('VsacCache', () => { mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); const valueSets = client.collectQuestionnaireValuesets(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeFalsy(); + valueSets.forEach(async vs => { + expect(await client.isCached(vs)).toBeFalsy(); }); try { await client.cacheQuestionnaireItems(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeTruthy(); + valueSets.forEach(async vs => { + expect(await client.isCached(vs)).toBeTruthy(); }); } finally { mockRequest.done(); @@ -76,21 +90,21 @@ describe('VsacCache', () => { }); - test('should be not load valuesets already cached unless forced', async () => { + test.skip('should be not load valuesets already cached unless forced', async () => { let mockRequest = nock('http://terminology.hl7.org/'); mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); try { const valueSets = client.collectQuestionnaireValuesets(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeFalsy(); + valueSets.forEach( async vs => { + expect(await client.isCached(vs)).toBeFalsy(); }); let cached = await client.cacheQuestionnaireItems(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeTruthy(); + valueSets.forEach(async vs => { + expect(await client.isCached(vs)).toBeTruthy(); }); const vs = valueSets.values().next().value; @@ -113,8 +127,8 @@ describe('VsacCache', () => { mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(404, ""); const valueSets = client.collectQuestionnaireValuesets(questionnaire); - valueSets.forEach(vs => { - expect(client.isCached(vs)).toBeFalsy(); + valueSets.forEach(async vs => { + expect(await client.isCached(vs)).toBeFalsy(); }); try { diff --git a/src/lib/vsac_cache.ts b/src/lib/vsac_cache.ts index 91fa9b0d..cb68fea8 100644 --- a/src/lib/vsac_cache.ts +++ b/src/lib/vsac_cache.ts @@ -2,19 +2,23 @@ import axios from 'axios'; import fhirpath from 'fhirpath'; import fs from 'fs'; import { stringify } from 'querystring'; - +import { FhirUtilities } from '../fhir/utilities'; +import { Globals } from '../globals'; +import constants from '../constants'; class VsacCache { cacheDir: string; apiKey: string; baseUrl: string; onlyVsac: boolean; + base_version: string; - constructor(cacheDir: string, apiKey: string, baseUrl = 'http://cts.nlm.nih.gov/fhir/', onlyVsac = false) { + constructor(cacheDir: string, apiKey: string, baseUrl = 'http://cts.nlm.nih.gov/fhir/', onlyVsac = false, base_version = '4_0_0') { this.cacheDir = cacheDir; this.apiKey = apiKey; this.baseUrl = baseUrl; this.onlyVsac = onlyVsac; + this.base_version = base_version; } @@ -87,19 +91,20 @@ class VsacCache { /** * - * @param connonical the Url to download + * @param idOrUrl the Url to download * @param forceReload flag to force recaching already cached values * @returns Map that contains results url: {cached, valueSet, error} */ - async downloadAndCacheValueset(connonical: string, forceReload = false) { - if (forceReload || !(this.isCached(connonical))) { - const vs = await this.downloadValueset(connonical); + async downloadAndCacheValueset(idOrUrl: string, forceReload = false) { + if (forceReload || !(await this.isCached(idOrUrl))) { + const vs = await this.downloadValueset(idOrUrl); if (vs.get("error")) { - console.log("Error Downloading ", connonical) + console.log("Error Downloading ", idOrUrl) console.log(vs.get("error").message); } else if (vs.get("valueSet")) { - this.storeValueSet(connonical, vs.get("valueSet")); + + await this.storeValueSet(this.getValuesetId(idOrUrl), vs.get("valueSet")); vs.set("cached", true); } return vs; @@ -111,24 +116,25 @@ class VsacCache { /** * - * @param connonical the url to download + * @param idOrUrl the url to download * @returns Map that contains results url: {valueset, error} */ - async downloadValueset(connonical: string) { + async downloadValueset(idOrUrl: string) { const retValue = new Map(); + let vsUrl = this.gtValuesetURL(idOrUrl); const headers: any = { "Accept": "application/json+fhir" }; let isVsac = false; // this will only add headers to vsac urls - if (connonical.startsWith(this.baseUrl)) { + if (vsUrl.startsWith(this.baseUrl)) { headers['Authorization'] = "Basic " + Buffer.from(':' + this.apiKey).toString('base64'); isVsac = true; } // this will try to download valuesets that are not in vsac as well based on the // connonical url passed in. - let url = connonical; - if (connonical.startsWith(this.baseUrl)) { + let url = vsUrl; + if (vsUrl.startsWith(this.baseUrl)) { url = url + "/$expand"; } // axios cleanup @@ -143,8 +149,8 @@ class VsacCache { } catch (error: any) { retValue.set("error", error) } - }else{ - retValue.set("error", "Cannot download non vsac valuesets: "+ url); + } else { + retValue.set("error", "Cannot download non vsac valuesets: " + url); } return retValue; @@ -152,46 +158,84 @@ class VsacCache { /** * - * @param connonical url to test if already cached + * @param idOrUrl url to test if already cached * @returns true or false */ - isCached(connonical: string) { - const fileName = this.getCacheName(connonical) - return fs.existsSync(fileName); + async isCached(idOrUrl: string) { + let id = this.getValuesetId(idOrUrl); + + // Grab an instance of our DB and collection + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); + // Query our collection for this observation + return await new Promise(( resolve, reject) => { + collection.findOne({ id: id}, (err: any, valueSet: any) => { + if (err) { + console.log('Error with ValueSet.searchById: ', err); + reject(err); + } + if (valueSet) { + resolve(valueSet); + } + resolve(null); + }); + }); } /** - * - * @param connonical url key to cache + * Stores a valueset in the cache. This currently only works for new inserts and will not update + * any resources currently cached. This will be updated with a move to Mongo. * @param vs the valueset to cache */ - storeValueSet(connonical: string, vs: any) { - const fileName = this.getCacheName(connonical) - fs.writeFileSync(fileName, JSON.stringify(vs)); + async storeValueSet( id: string, vs: any) { + if(!vs.id){vs.id = id} + await new Promise((resolve, reject) => FhirUtilities.store(vs, resolve, reject)); } /** * - * @param connonical the url to cache + * @param idOrUrl the url to cache * @returns identifier used to cache the vs */ - getCacheName(connonical: string) { - const url = new URL(connonical); - let parts = url.pathname.split("/") - return `${this.cacheDir}/${parts[parts.length - 1]}`; + getValuesetId(idOrUrl: string) { + // is this a url or an id + if (idOrUrl.startsWith('http://') || idOrUrl.startsWith('https://')) { + const url = new URL(idOrUrl); + let parts = url.pathname.split("/") + return parts[parts.length - 1]; + } + return idOrUrl; } + /** + * + * @param idOrUrl the url to cache + * @returns identifier used to cache the vs + */ + gtValuesetURL(idOrUrl: string) { + // is this a url or an id + if (idOrUrl.startsWith('http://') || idOrUrl.startsWith('https://')) { + return idOrUrl; + } + let path = `${this.baseUrl}/ValueSet/${idOrUrl}`; + path = path.replace("//","/"); + return path ; + } /** * Clear all of the cached valuesets + * This currently does not work since merging and updating to use tingo. Drop collection in tingo is broken + * */ clearCache() { - try { - let files = fs.readdirSync(this.cacheDir) - files.map(file => fs.unlinkSync(`${this.cacheDir}/${file}`)) - - } catch (err) { - console.log(err); - } + // drop the collection + try{ + const db = Globals.database; + let collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); + if(collection){collection.drop(console.log); + let history_collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}_History`); + if(history_collection){history_collection.drop(console.log);} + } + }catch(e){ } } } From fb1db5418025d63f898f7f2a16393d51dfac521e Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 19 Jan 2023 12:13:15 -0500 Subject: [PATCH 34/83] Fixing linting issues --- src/fhir/utilities.ts | 2 +- src/lib/__tests__/vsac_cache.test.ts | 52 +++++++++++++-------------- src/lib/vsac_cache.ts | 54 ++++++++++++++-------------- 3 files changed, 55 insertions(+), 53 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 43656512..b658f0b7 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -7,7 +7,7 @@ import { Globals } from '../globals'; import * as path from 'path'; import * as fs from 'fs'; import * as process from 'process'; -import crypto from "crypto"; +import crypto from 'crypto'; const re = /(?:\.([^.]+))?$/; diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts index d9045342..a8e4f8b8 100644 --- a/src/lib/__tests__/vsac_cache.test.ts +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -2,15 +2,15 @@ import VsacCache from '../vsac_cache'; import library from './fixtures/library.json'; import questionnaire from './fixtures/questionnaire.json'; -import valueSet from './fixtures/valueSet.json' +import valueSet from './fixtures/valueSet.json'; import fs from 'fs'; -import nock from 'nock' +import nock from 'nock'; import { TingoDatabase } from '../TingoDatabase'; import { Globals } from '../../globals'; describe('VsacCache', () => { - let client = new VsacCache('./tmp', '2c1d55c3-3484-4902-b645-25f3a4974ce6'); - let dbClient = new TingoDatabase( { + const client = new VsacCache('./tmp', '2c1d55c3-3484-4902-b645-25f3a4974ce6'); + const dbClient = new TingoDatabase( { location: './tingo_db', options: '' }); @@ -20,7 +20,7 @@ describe('VsacCache', () => { beforeEach(() => { Globals.database.close(); - fs.rmSync("./tingo_db", { recursive: true, force: true }); + fs.rmSync('./tingo_db', { recursive: true, force: true }); dbClient.connect(); Globals.databaseClient = dbClient.client; Globals.database = dbClient.database; @@ -33,15 +33,15 @@ describe('VsacCache', () => { // the server for CI testing with someones api credentials test('should be able to collect valueset references from Library Resources', async () => { - let valueSets = client.collectLibraryValuesets(library); - expect(valueSets).toEqual(new Set(["http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.85", - "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35"])); + const valueSets = client.collectLibraryValuesets(library); + expect(valueSets).toEqual(new Set(['http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.85', + 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35'])); }); test('should be able to collect valueset references from Questionnaire Resources', async () => { - let valueSets = client.collectQuestionnaireValuesets(questionnaire); - expect(valueSets).toEqual(new Set(["http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked"])); + const valueSets = client.collectQuestionnaireValuesets(questionnaire); + expect(valueSets).toEqual(new Set(['http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked'])); }); @@ -50,8 +50,8 @@ describe('VsacCache', () => { const mockRequest = nock('http://cts.nlm.nih.gov/fhir'); - mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.85/$expand").reply(200, JSON.stringify(valueSet)); - mockRequest.get("/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand").reply(200, JSON.stringify(valueSet)); + mockRequest.get('/ValueSet/2.16.840.1.113762.1.4.1219.85/$expand').reply(200, JSON.stringify(valueSet)); + mockRequest.get('/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand').reply(200, JSON.stringify(valueSet)); const valueSets = client.collectLibraryValuesets(library); valueSets.forEach(async vs => { @@ -72,7 +72,7 @@ describe('VsacCache', () => { test('should be able to cache valuesets in Questionnaire Resources', async () => { const mockRequest = nock('http://terminology.hl7.org/'); - mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); + mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(200, JSON.stringify(valueSet)); const valueSets = client.collectQuestionnaireValuesets(questionnaire); valueSets.forEach(async vs => { @@ -92,8 +92,8 @@ describe('VsacCache', () => { test.skip('should be not load valuesets already cached unless forced', async () => { - let mockRequest = nock('http://terminology.hl7.org/'); - mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); + const mockRequest = nock('http://terminology.hl7.org/'); + mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(200, JSON.stringify(valueSet)); try { const valueSets = client.collectQuestionnaireValuesets(questionnaire); valueSets.forEach( async vs => { @@ -101,7 +101,7 @@ describe('VsacCache', () => { }); - let cached = await client.cacheQuestionnaireItems(questionnaire); + const cached = await client.cacheQuestionnaireItems(questionnaire); valueSets.forEach(async vs => { expect(await client.isCached(vs)).toBeTruthy(); @@ -109,12 +109,12 @@ describe('VsacCache', () => { const vs = valueSets.values().next().value; let update = await client.downloadAndCacheValueset(vs); - expect(update.get("cached")).toBeFalsy(); + expect(update.get('cached')).toBeFalsy(); - mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(200, JSON.stringify(valueSet)); + mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(200, JSON.stringify(valueSet)); update = await client.downloadAndCacheValueset(vs, true); - expect(update.get("cached")).toBeTruthy(); + expect(update.get('cached')).toBeTruthy(); } finally { mockRequest.done(); } @@ -124,7 +124,7 @@ describe('VsacCache', () => { test('should be able to handle errors downloading valuesests', async () => { const mockRequest = nock('http://terminology.hl7.org/'); - mockRequest.get("/ValueSet/yes-no-unknown-not-asked").reply(404, ""); + mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(404, ''); const valueSets = client.collectQuestionnaireValuesets(questionnaire); valueSets.forEach(async vs => { @@ -132,19 +132,19 @@ describe('VsacCache', () => { }); try { - const err = await client.downloadAndCacheValueset("http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked"); - expect(err.get("error")).toBeDefined() + const err = await client.downloadAndCacheValueset('http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked'); + expect(err.get('error')).toBeDefined(); } finally { mockRequest.done(); } }); - test("Should not attempt tp download non-vsac valuesets if configured to do so", async () => { + test('Should not attempt tp download non-vsac valuesets if configured to do so', async () => { client.onlyVsac = true; - const err = await client.downloadAndCacheValueset("http://localhost:9999/vs/1234"); - expect(err.get("error")).toEqual("Cannot download non vsac valuesets: http://localhost:9999/vs/1234") + const err = await client.downloadAndCacheValueset('http://localhost:9999/vs/1234'); + expect(err.get('error')).toEqual('Cannot download non vsac valuesets: http://localhost:9999/vs/1234'); - }) + }); diff --git a/src/lib/vsac_cache.ts b/src/lib/vsac_cache.ts index cb68fea8..ded4ae65 100644 --- a/src/lib/vsac_cache.ts +++ b/src/lib/vsac_cache.ts @@ -62,10 +62,10 @@ class VsacCache { */ collectQuestionnaireValuesets(obj: any) { const items = obj.item; - let valuesets = new Set() + let valuesets = new Set(); items.forEach(async (item: any) => { if (item.answerValueSet) { - valuesets.add(item.answerValueSet) + valuesets.add(item.answerValueSet); } if (item.item) { valuesets = new Set([...valuesets, ...this.collectQuestionnaireValuesets(item)]); @@ -82,7 +82,7 @@ class VsacCache { * @returns a Map with the return values from caching the valuesets. */ async cacheValuesets(valueSets: Set | [], forceReload = false) { - const values = Array.from(valueSets) + const values = Array.from(valueSets); const results = new Map(); return await Promise.all(values.map(async vs => { return results.set(vs, await this.downloadAndCacheValueset(vs, forceReload)); @@ -98,19 +98,19 @@ class VsacCache { async downloadAndCacheValueset(idOrUrl: string, forceReload = false) { if (forceReload || !(await this.isCached(idOrUrl))) { const vs = await this.downloadValueset(idOrUrl); - if (vs.get("error")) { - console.log("Error Downloading ", idOrUrl) - console.log(vs.get("error").message); + if (vs.get('error')) { + console.log('Error Downloading ', idOrUrl); + console.log(vs.get('error').message); } - else if (vs.get("valueSet")) { + else if (vs.get('valueSet')) { - await this.storeValueSet(this.getValuesetId(idOrUrl), vs.get("valueSet")); - vs.set("cached", true); + await this.storeValueSet(this.getValuesetId(idOrUrl), vs.get('valueSet')); + vs.set('cached', true); } return vs; } const ret = new Map(); - ret.set("cached", false); + ret.set('cached', false); return ret; } @@ -121,36 +121,36 @@ class VsacCache { */ async downloadValueset(idOrUrl: string) { const retValue = new Map(); - let vsUrl = this.gtValuesetURL(idOrUrl); + const vsUrl = this.gtValuesetURL(idOrUrl); const headers: any = { - "Accept": "application/json+fhir" + 'Accept': 'application/json+fhir' }; let isVsac = false; // this will only add headers to vsac urls if (vsUrl.startsWith(this.baseUrl)) { - headers['Authorization'] = "Basic " + Buffer.from(':' + this.apiKey).toString('base64'); + headers['Authorization'] = 'Basic ' + Buffer.from(':' + this.apiKey).toString('base64'); isVsac = true; } // this will try to download valuesets that are not in vsac as well based on the // connonical url passed in. let url = vsUrl; if (vsUrl.startsWith(this.baseUrl)) { - url = url + "/$expand"; + url = url + '/$expand'; } // axios cleanup - await process.nextTick(() => { }); + await process.nextTick(() => { const v = 1;}); if ((this.onlyVsac && isVsac) || !this.onlyVsac) { try { - console.log("Downloading vs " + url) + console.log('Downloading vs ' + url); const vs = await axios.get(url, { headers: headers }); - retValue.set("valueSet", vs.data); + retValue.set('valueSet', vs.data); } catch (error: any) { - retValue.set("error", error) + retValue.set('error', error); } } else { - retValue.set("error", "Cannot download non vsac valuesets: " + url); + retValue.set('error', 'Cannot download non vsac valuesets: ' + url); } return retValue; @@ -162,7 +162,7 @@ class VsacCache { * @returns true or false */ async isCached(idOrUrl: string) { - let id = this.getValuesetId(idOrUrl); + const id = this.getValuesetId(idOrUrl); // Grab an instance of our DB and collection const db = Globals.database; @@ -188,7 +188,7 @@ class VsacCache { * @param vs the valueset to cache */ async storeValueSet( id: string, vs: any) { - if(!vs.id){vs.id = id} + if(!vs.id){vs.id = id;} await new Promise((resolve, reject) => FhirUtilities.store(vs, resolve, reject)); } @@ -201,7 +201,7 @@ class VsacCache { // is this a url or an id if (idOrUrl.startsWith('http://') || idOrUrl.startsWith('https://')) { const url = new URL(idOrUrl); - let parts = url.pathname.split("/") + const parts = url.pathname.split('/'); return parts[parts.length - 1]; } return idOrUrl; @@ -218,7 +218,7 @@ class VsacCache { return idOrUrl; } let path = `${this.baseUrl}/ValueSet/${idOrUrl}`; - path = path.replace("//","/"); + path = path.replace('//','/'); return path ; } /** @@ -230,12 +230,14 @@ class VsacCache { // drop the collection try{ const db = Globals.database; - let collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); + const collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); if(collection){collection.drop(console.log); - let history_collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}_History`); + const history_collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}_History`); if(history_collection){history_collection.drop(console.log);} } - }catch(e){ } + }catch(e){ + console.error(e); + } } } From cd3f67597e24d6452c49d8b7e10af4144cfc4324 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 19 Jan 2023 12:15:43 -0500 Subject: [PATCH 35/83] Making things pretty --- src/fhir/utilities.ts | 17 ++-- src/lib/__tests__/vsac_cache.test.ts | 62 ++++++------ src/lib/vsac_cache.ts | 143 +++++++++++++++------------ 3 files changed, 116 insertions(+), 106 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index b658f0b7..134647a8 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -36,7 +36,6 @@ export class FhirUtilities { return resolveSchema(baseVersion, 'Meta'); }; - static async store(resource: any, resolve: any, reject: any, baseVersion = '4_0_0') { const db = Globals.database; @@ -78,7 +77,7 @@ export class FhirUtilities { } const Resource = resolveSchema(baseVersion, resource.resourceType); - + const fhirResource = new Resource(resource); // Create the resource's metadata @@ -89,7 +88,7 @@ export class FhirUtilities { }); if (collectionString === '') { - reject(' Unsupported FHIR Resource Type'); + reject(' Unsupported FHIR Resource Type'); } const collection = db.collection(collectionString); @@ -106,8 +105,8 @@ export class FhirUtilities { collection.insert(doc, (err: any) => { if (err) { console.log(' Error with %s.create: ', resource.resourceType, err.message); - reject(err); - return; + reject(err); + return; } else { console.log(' Successfully added ' + resource.resourceType + ' -- ' + id); } @@ -116,13 +115,13 @@ export class FhirUtilities { const history_collection = db.collection(historyCollectionString); // Insert our patient record to history but don't assign _id - history_collection.insert(history_doc, (err2: any) => { + history_collection.insert(history_doc, (err2: any) => { if (err2) { console.log(' Error with %sHistory.create: ', resource.resourceType, err2.message); - reject(err2); - return; + reject(err2); + return; } - resolve({ id: doc.id, resource_version: doc.meta.versionId }); + resolve({ id: doc.id, resource_version: doc.meta.versionId }); }); }); } diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts index a8e4f8b8..cca862c6 100644 --- a/src/lib/__tests__/vsac_cache.test.ts +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -1,4 +1,3 @@ - import VsacCache from '../vsac_cache'; import library from './fixtures/library.json'; import questionnaire from './fixtures/questionnaire.json'; @@ -10,14 +9,14 @@ import { Globals } from '../../globals'; describe('VsacCache', () => { const client = new VsacCache('./tmp', '2c1d55c3-3484-4902-b645-25f3a4974ce6'); - const dbClient = new TingoDatabase( { - location: './tingo_db', - options: '' - }); + const dbClient = new TingoDatabase({ + location: './tingo_db', + options: '' + }); dbClient.connect(); Globals.databaseClient = dbClient.client; Globals.database = dbClient.database; - + beforeEach(() => { Globals.database.close(); fs.rmSync('./tingo_db', { recursive: true, force: true }); @@ -29,29 +28,35 @@ describe('VsacCache', () => { jest.resetModules(); }); - // need to mock the server endpoints to we do not require hitting - // the server for CI testing with someones api credentials + // need to mock the server endpoints to we do not require hitting + // the server for CI testing with someones api credentials test('should be able to collect valueset references from Library Resources', async () => { const valueSets = client.collectLibraryValuesets(library); - expect(valueSets).toEqual(new Set(['http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.85', - 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35'])); + expect(valueSets).toEqual( + new Set([ + 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.85', + 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.35' + ]) + ); }); - test('should be able to collect valueset references from Questionnaire Resources', async () => { const valueSets = client.collectQuestionnaireValuesets(questionnaire); - expect(valueSets).toEqual(new Set(['http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked'])); + expect(valueSets).toEqual( + new Set(['http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked']) + ); }); - test('should be able to cache valuesets in Library Resources', async () => { - - const mockRequest = nock('http://cts.nlm.nih.gov/fhir'); - mockRequest.get('/ValueSet/2.16.840.1.113762.1.4.1219.85/$expand').reply(200, JSON.stringify(valueSet)); - mockRequest.get('/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand').reply(200, JSON.stringify(valueSet)); + mockRequest + .get('/ValueSet/2.16.840.1.113762.1.4.1219.85/$expand') + .reply(200, JSON.stringify(valueSet)); + mockRequest + .get('/ValueSet/2.16.840.1.113762.1.4.1219.35/$expand') + .reply(200, JSON.stringify(valueSet)); const valueSets = client.collectLibraryValuesets(library); valueSets.forEach(async vs => { @@ -66,11 +71,9 @@ describe('VsacCache', () => { } finally { mockRequest.done(); } - }); test('should be able to cache valuesets in Questionnaire Resources', async () => { - const mockRequest = nock('http://terminology.hl7.org/'); mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(200, JSON.stringify(valueSet)); @@ -89,18 +92,15 @@ describe('VsacCache', () => { } }); - test.skip('should be not load valuesets already cached unless forced', async () => { - const mockRequest = nock('http://terminology.hl7.org/'); mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(200, JSON.stringify(valueSet)); try { const valueSets = client.collectQuestionnaireValuesets(questionnaire); - valueSets.forEach( async vs => { + valueSets.forEach(async vs => { expect(await client.isCached(vs)).toBeFalsy(); }); - const cached = await client.cacheQuestionnaireItems(questionnaire); valueSets.forEach(async vs => { @@ -118,11 +118,9 @@ describe('VsacCache', () => { } finally { mockRequest.done(); } - }); test('should be able to handle errors downloading valuesests', async () => { - const mockRequest = nock('http://terminology.hl7.org/'); mockRequest.get('/ValueSet/yes-no-unknown-not-asked').reply(404, ''); @@ -132,7 +130,9 @@ describe('VsacCache', () => { }); try { - const err = await client.downloadAndCacheValueset('http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked'); + const err = await client.downloadAndCacheValueset( + 'http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked' + ); expect(err.get('error')).toBeDefined(); } finally { mockRequest.done(); @@ -142,10 +142,8 @@ describe('VsacCache', () => { test('Should not attempt tp download non-vsac valuesets if configured to do so', async () => { client.onlyVsac = true; const err = await client.downloadAndCacheValueset('http://localhost:9999/vs/1234'); - expect(err.get('error')).toEqual('Cannot download non vsac valuesets: http://localhost:9999/vs/1234'); - + expect(err.get('error')).toEqual( + 'Cannot download non vsac valuesets: http://localhost:9999/vs/1234' + ); }); - - - -}); \ No newline at end of file +}); diff --git a/src/lib/vsac_cache.ts b/src/lib/vsac_cache.ts index ded4ae65..0c08252f 100644 --- a/src/lib/vsac_cache.ts +++ b/src/lib/vsac_cache.ts @@ -6,14 +6,19 @@ import { FhirUtilities } from '../fhir/utilities'; import { Globals } from '../globals'; import constants from '../constants'; class VsacCache { - cacheDir: string; apiKey: string; baseUrl: string; onlyVsac: boolean; base_version: string; - constructor(cacheDir: string, apiKey: string, baseUrl = 'http://cts.nlm.nih.gov/fhir/', onlyVsac = false, base_version = '4_0_0') { + constructor( + cacheDir: string, + apiKey: string, + baseUrl = 'http://cts.nlm.nih.gov/fhir/', + onlyVsac = false, + base_version = '4_0_0' + ) { this.cacheDir = cacheDir; this.apiKey = apiKey; this.baseUrl = baseUrl; @@ -21,9 +26,8 @@ class VsacCache { this.base_version = base_version; } - /** - * + * * @param library The library to cache valuesets for * @param forceReload flag to force reaching valuesets already cached * @returns Map of caching results url: {valueSet, error, cached} @@ -34,7 +38,7 @@ class VsacCache { } /** - * + * * @param obj Questionnaire|item object to cache valuesets for * @param forceReload flag to force reaching valuesets already cached * @returns Map of caching results url: {valueSet, error, cached} @@ -46,17 +50,17 @@ class VsacCache { } /** - * + * * @param library The fhir Library to download valuesets from * @returns a Set that includes all of the valueset urls found in the Library */ collectLibraryValuesets(library: any) { - // ensure only unique values + // ensure only unique values return new Set(fhirpath.evaluate(library, 'Library.dataRequirement.codeFilter.valueSet')); } /** - * + * * @param obj the Questionnaire object or item to collect answerValueSet urls from * @returns a Set that includes all of the valuesets in the passed object. This returns values for sub items as well */ @@ -71,27 +75,29 @@ class VsacCache { valuesets = new Set([...valuesets, ...this.collectQuestionnaireValuesets(item)]); } }); - // ensure only unique values + // ensure only unique values return valuesets; } /** - * - * @param valueSets The valusets to cache - * @param forceReload flag to force downloading and caching of the valuesets - * @returns a Map with the return values from caching the valuesets. + * + * @param valueSets The valusets to cache + * @param forceReload flag to force downloading and caching of the valuesets + * @returns a Map with the return values from caching the valuesets. */ async cacheValuesets(valueSets: Set | [], forceReload = false) { const values = Array.from(valueSets); const results = new Map(); - return await Promise.all(values.map(async vs => { - return results.set(vs, await this.downloadAndCacheValueset(vs, forceReload)); - })); + return await Promise.all( + values.map(async vs => { + return results.set(vs, await this.downloadAndCacheValueset(vs, forceReload)); + }) + ); } /** - * - * @param idOrUrl the Url to download + * + * @param idOrUrl the Url to download * @param forceReload flag to force recaching already cached values * @returns Map that contains results url: {cached, valueSet, error} */ @@ -101,9 +107,7 @@ class VsacCache { if (vs.get('error')) { console.log('Error Downloading ', idOrUrl); console.log(vs.get('error').message); - } - else if (vs.get('valueSet')) { - + } else if (vs.get('valueSet')) { await this.storeValueSet(this.getValuesetId(idOrUrl), vs.get('valueSet')); vs.set('cached', true); } @@ -115,15 +119,15 @@ class VsacCache { } /** - * - * @param idOrUrl the url to download + * + * @param idOrUrl the url to download * @returns Map that contains results url: {valueset, error} */ async downloadValueset(idOrUrl: string) { const retValue = new Map(); const vsUrl = this.gtValuesetURL(idOrUrl); const headers: any = { - 'Accept': 'application/json+fhir' + Accept: 'application/json+fhir' }; let isVsac = false; // this will only add headers to vsac urls @@ -131,14 +135,16 @@ class VsacCache { headers['Authorization'] = 'Basic ' + Buffer.from(':' + this.apiKey).toString('base64'); isVsac = true; } - // this will try to download valuesets that are not in vsac as well based on the - // connonical url passed in. + // this will try to download valuesets that are not in vsac as well based on the + // connonical url passed in. let url = vsUrl; if (vsUrl.startsWith(this.baseUrl)) { url = url + '/$expand'; } - // axios cleanup - await process.nextTick(() => { const v = 1;}); + // axios cleanup + await process.nextTick(() => { + const v = 1; + }); if ((this.onlyVsac && isVsac) || !this.onlyVsac) { try { console.log('Downloading vs ' + url); @@ -157,43 +163,45 @@ class VsacCache { } /** - * + * * @param idOrUrl url to test if already cached * @returns true or false */ async isCached(idOrUrl: string) { const id = this.getValuesetId(idOrUrl); - // Grab an instance of our DB and collection - const db = Globals.database; - const collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); - // Query our collection for this observation - return await new Promise(( resolve, reject) => { - collection.findOne({ id: id}, (err: any, valueSet: any) => { - if (err) { - console.log('Error with ValueSet.searchById: ', err); + // Grab an instance of our DB and collection + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); + // Query our collection for this observation + return await new Promise((resolve, reject) => { + collection.findOne({ id: id }, (err: any, valueSet: any) => { + if (err) { + console.log('Error with ValueSet.searchById: ', err); reject(err); - } - if (valueSet) { - resolve(valueSet); - } - resolve(null); - }); + } + if (valueSet) { + resolve(valueSet); + } + resolve(null); + }); }); } /** - * Stores a valueset in the cache. This currently only works for new inserts and will not update - * any resources currently cached. This will be updated with a move to Mongo. + * Stores a valueset in the cache. This currently only works for new inserts and will not update + * any resources currently cached. This will be updated with a move to Mongo. * @param vs the valueset to cache */ - async storeValueSet( id: string, vs: any) { - if(!vs.id){vs.id = id;} + async storeValueSet(id: string, vs: any) { + if (!vs.id) { + vs.id = id; + } await new Promise((resolve, reject) => FhirUtilities.store(vs, resolve, reject)); } /** - * + * * @param idOrUrl the url to cache * @returns identifier used to cache the vs */ @@ -208,37 +216,42 @@ class VsacCache { } /** - * - * @param idOrUrl the url to cache - * @returns identifier used to cache the vs - */ + * + * @param idOrUrl the url to cache + * @returns identifier used to cache the vs + */ gtValuesetURL(idOrUrl: string) { // is this a url or an id if (idOrUrl.startsWith('http://') || idOrUrl.startsWith('https://')) { - return idOrUrl; + return idOrUrl; } let path = `${this.baseUrl}/ValueSet/${idOrUrl}`; - path = path.replace('//','/'); - return path ; + path = path.replace('//', '/'); + return path; } /** - * Clear all of the cached valuesets + * Clear all of the cached valuesets * This currently does not work since merging and updating to use tingo. Drop collection in tingo is broken - * + * */ clearCache() { - // drop the collection - try{ - const db = Globals.database; + // drop the collection + try { + const db = Globals.database; const collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}`); - if(collection){collection.drop(console.log); - const history_collection = db.collection(`${constants.COLLECTION.VALUESET}_${this.base_version}_History`); - if(history_collection){history_collection.drop(console.log);} + if (collection) { + collection.drop(console.log); + const history_collection = db.collection( + `${constants.COLLECTION.VALUESET}_${this.base_version}_History` + ); + if (history_collection) { + history_collection.drop(console.log); + } } - }catch(e){ + } catch (e) { console.error(e); } } } -export default VsacCache; \ No newline at end of file +export default VsacCache; From 19ea24e377dbe0598640a1b075f3cc167320df92 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Mon, 23 Jan 2023 15:28:09 -0500 Subject: [PATCH 36/83] updating node to version 14 --- .github/workflows/ci-workflow.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index a0ea4b92..6429e351 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: - node-version: '12.x' + node-version: '14.x' - run: npm install - run: npm run lint - run: npm run prettier @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [12] + node-version: [14] steps: - uses: actions/checkout@v1 From 5f43161516078505e927586d7feb3e28853b4a44 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Tue, 24 Jan 2023 19:23:48 -0500 Subject: [PATCH 37/83] add core functionality of package operation --- .gitignore | 3 +- env.json | 6 +- ...cttacoma+node-fhir-server-core+2.2.8.patch | 16 + src/config.ts | 14 +- src/fhir/questionnaireUtilities.ts | 408 ++++++++++++++++++ src/fhir/utilities.ts | 2 + src/hooks/rems.hook.ts | 8 +- src/lib/winston.ts | 6 +- src/services/questionnaire.service.ts | 27 +- 9 files changed, 479 insertions(+), 11 deletions(-) create mode 100644 patches/@projecttacoma+node-fhir-server-core+2.2.8.patch create mode 100644 src/fhir/questionnaireUtilities.ts diff --git a/.gitignore b/.gitignore index 409a8867..23372bd2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ logs/ node_modules/ dist/ .idea/ -.DS_Store \ No newline at end of file +.DS_Store +tingo_db/ diff --git a/env.json b/env.json index ded511b2..d08a95ef 100644 --- a/env.json +++ b/env.json @@ -13,7 +13,7 @@ }, "WHITELIST": { "type": "string", - "default": "http://localhost" + "default": "http://localhost, http://localhost:3005" }, "LOGGING_LEVEL": { "type": "string", @@ -30,5 +30,9 @@ "AUTH_SERVER_URI": { "type": "string", "default": "http://localhost:8090" + }, + "VSAC_KEY": { + "type": "string", + "default": "changeMe" } } diff --git a/patches/@projecttacoma+node-fhir-server-core+2.2.8.patch b/patches/@projecttacoma+node-fhir-server-core+2.2.8.patch new file mode 100644 index 00000000..8895b539 --- /dev/null +++ b/patches/@projecttacoma+node-fhir-server-core+2.2.8.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/@projecttacoma/node-fhir-server-core/dist/server/resources/4_0_0/schemas/datarequirement.js b/node_modules/@projecttacoma/node-fhir-server-core/dist/server/resources/4_0_0/schemas/datarequirement.js +index ef49581..6868203 100644 +--- a/node_modules/@projecttacoma/node-fhir-server-core/dist/server/resources/4_0_0/schemas/datarequirement.js ++++ b/node_modules/@projecttacoma/node-fhir-server-core/dist/server/resources/4_0_0/schemas/datarequirement.js +@@ -152,9 +152,9 @@ module.exports = class DataRequirement { + return; + } + +- let Element = require('./element.js'); ++ let CodeFilter = require('./datarequirementcodefilter.js'); + +- this.__data.codeFilter = Array.isArray(value) ? value.map(v => new Element(v)) : [new Element(value)]; ++ this.__data.codeFilter = Array.isArray(value) ? value.map(v => new CodeFilter(v)) : [new CodeFilter(value)]; + } + }); + Object.defineProperty(this, 'dateFilter', { diff --git a/src/config.ts b/src/config.ts index 1f3bdb79..e7a72845 100644 --- a/src/config.ts +++ b/src/config.ts @@ -22,7 +22,8 @@ export default { level: 'info' }, general: { - resourcePath: 'CDS-Library/CRD-DTR' + resourcePath: 'src/cds-library/CRD-DTR', + VsacApiKey: env.VSAC_KEY }, database: { selected: 'tingo', @@ -101,7 +102,16 @@ export default { }, questionnaire: { service: './src/services/questionnaire.service.ts', - versions: [fhirConstants.VERSIONS['4_0_0']] + versions: [fhirConstants.VERSIONS['4_0_0']], + operation: [ + { + name: 'questionnaire-package', + route: '/:id/$questionnaire-package', + method: 'POST', + reference: + 'https://build.fhir.org/ig/HL7/davinci-dtr/OperationDefinition-Questionnaire-for-Order.html' + } + ] }, questionnaireresponse: { service: './src/services/questionnaireresponse.service.ts', diff --git a/src/fhir/questionnaireUtilities.ts b/src/fhir/questionnaireUtilities.ts new file mode 100644 index 00000000..109eb5b0 --- /dev/null +++ b/src/fhir/questionnaireUtilities.ts @@ -0,0 +1,408 @@ +import { + Bundle, + BundleEntry, + DataRequirement, + Extension, + FhirResource, + Library, + Parameters, + Questionnaire, + QuestionnaireItem, + Resource, + ValueSet +} from 'fhir/r4'; +import { values } from 'lodash'; +import constants from '../constants'; +import { Globals } from '../globals'; +import { FhirUtilities } from './utilities'; +import container from '../lib/winston'; +import config from '../config'; + +interface ResourceTable { + [key: string]: FhirResource; +} +interface ValueSetMap { + [key: string]: ValueSet; +} +interface LibraryMap { + [key: string]: Library; +} + +const VSAC_CANONICAL_BASE = 'https://cts.nlm.nih.gov/fhir/ValueSet/'; +const CQF_LIBRARY_EXTENSION = 'http://hl7.org/fhir/StructureDefinition/cqf-library'; + +export class QuestionnaireUtilities { + static logger = container.get('application'); + static async createPackageFromQuestionnaire(questionnaire: Questionnaire) { + questionnaire = await this.processSubQuestionnaires(questionnaire); + const processedQuestionnaire = await this.processValueSets(questionnaire); + const bundle: Bundle = { resourceType: 'Bundle', type: 'collection' }; + const entries: BundleEntry[] = []; + const extensions = processedQuestionnaire.extension || []; + const fetchedSets: ValueSetMap = {}; + const fetchedLibraries: LibraryMap = {}; + for (const extension of extensions) { + if (extension.url === CQF_LIBRARY_EXTENSION) { + // library to load + const valueCanonical = extension.valueCanonical; + if (valueCanonical) { + // note: libraries have already been checked for duplicates when originally processed + const library = await this.findLibraryByUrl(valueCanonical); + if (library && library.id && !fetchedLibraries[library.id]) { + fetchedLibraries[library.id] = library; + await this.getAllRelatedLibraries(library, fetchedLibraries); + } + } + } + } + for (const key of Object.keys(fetchedLibraries)) { + const library: Library = fetchedLibraries[key]; + const libraryEntry: BundleEntry = { resource: library }; + entries.push(libraryEntry); + const valueSets = await this.processLibraryCodeFilters(library, fetchedSets); + for (const valueSet of valueSets) { + const valueSetEntry: BundleEntry = { resource: valueSet }; + entries.push(valueSetEntry); + } + } + const questionnaireEntry: BundleEntry = { resource: processedQuestionnaire }; + entries.push(questionnaireEntry); + bundle.entry = entries; + const parameter: Parameters = { + resourceType: 'Parameters', + parameter: [ + { + name: 'return', + resource: bundle + } + ] + }; + return parameter; + } + + // Input object fetchedLibraries modified to contain all related artifacts + static async getAllRelatedLibraries(library: Library, fetchedLibraries: LibraryMap) { + const newLibraries = []; + if (library.relatedArtifact) { + for (const artifact of library.relatedArtifact) { + if (artifact.type === 'depends-on' && artifact.resource) { + const parts = artifact.resource.split('/'); + const resourceType = parts[0]; + const artifactId = parts[1]; + if (resourceType === 'Library' && artifactId) { + if (!fetchedLibraries[artifactId]) { + const fetchedLibrary = await this.findLibraryById(artifactId); + if (fetchedLibrary) { + fetchedLibraries[artifactId] = fetchedLibrary; + this.getAllRelatedLibraries(fetchedLibrary, fetchedLibraries); // recurse + } + } + } + } + } + } + } + static async fetchValueSetFromVSAC(url: string) { + const headers = new Headers(); + const username = 'apikey'; + const password = config.general.VsacApiKey; + headers.set( + 'Authorization', + 'Basic ' + Buffer.from(username + ':' + password).toString('base64') + ); + headers.set('Content-Type', 'application/json'); + const response = await fetch(url, { + method: 'GET', + headers: headers + }); + try { + const body: ValueSet = await response.json(); + // the url returns with http but it should be https? This might be a product of not using the ticket API here + // nevertheless, to search by url on our own database, the url must match what's in the library resource. + // so here the http version of the url is replaced by the one used to fetch the resource (https version of the url) + body.url = url; + return body; + } catch { + this.logger.warn(`VSAC Loader >> Failed to fetch ValueSet: ${url}`); + return undefined; + } + } + // On load of new library, finds ValueSets in codefilters and + // loads them as well + static async processLibraryCodeFilters(library: Library, fetchedSets: ValueSetMap) { + const returnValue = []; + const dataReqs: DataRequirement[] = library.dataRequirement || []; + for (const dataReq of dataReqs) { + const filters = dataReq.codeFilter || []; + for (const filter of filters) { + const valueSetUrl = filter.valueSet; + if (valueSetUrl) { + const keys = Object.keys(fetchedSets); + if (!(valueSetUrl in keys)) { + // needs case where valueSet is not from VSAC, it could be a local reference + if (valueSetUrl.startsWith(VSAC_CANONICAL_BASE)) { + let valueSet = await this.findValueSetByUrl(valueSetUrl); + if (!valueSet) { + valueSet = await this.fetchValueSetFromVSAC(valueSetUrl); + if (valueSet) { + await FhirUtilities.store( + valueSet, + function () { + return; + }, + function () { + return; + } + ); + } else { + this.logger.warn(`Library Processor >> Failed to find ValueSet: ${valueSetUrl}`); + } + } + + if (valueSet && valueSet.url) { + // add valueSets we've already fetched to the fetched sets so we don't do it again + if (!fetchedSets[valueSet.url]) { + fetchedSets[valueSet.url] = valueSet; + } + returnValue.push(valueSet); + } + } + } + } + } + } + return returnValue; + } + static async findQuestionnaire(id: string): Promise { + return new Promise((resolve, reject) => { + const Questionnaire = FhirUtilities.getQuestionnaire('4_0_0'); + // Grab an instance of our DB and collection + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRE}_${'4_0_0'}`); + // Query our collection for this observation + collection.findOne({ id: id.toString() }, (err: any, questionnaire: Questionnaire) => { + if (err) { + return reject(err); + } + if (questionnaire) { + resolve(new Questionnaire(questionnaire)); + } + resolve(undefined); + }); + }); + } + static async findLibraryByUrl(url: string): Promise { + return new Promise((resolve, reject) => { + const Library = FhirUtilities.getLibrary('4_0_0'); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.LIBRARY}_${'4_0_0'}`); + collection.findOne({ url: url.toString() }, (err: any, library: Library) => { + if (err) { + return reject(err); + } + if (library) { + resolve(new Library(library)); + } + resolve(undefined); + }); + }); + } + static async findLibraryById(id: string): Promise { + return new Promise((resolve, reject) => { + const Library = FhirUtilities.getLibrary('4_0_0'); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.LIBRARY}_${'4_0_0'}`); + collection.findOne({ id: id.toString() }, (err: any, library: Library) => { + if (err) { + return reject(err); + } + if (library) { + resolve(new Library(library)); + } + resolve(undefined); + }); + }); + } + static async findValueSetByUrl(url: string): Promise { + return new Promise((resolve, reject) => { + const ValueSet = FhirUtilities.getValueSet('4_0_0'); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.VALUESET}_${'4_0_0'}`); + collection.findOne({ url: url.toString() }, (err: any, valueset: ValueSet) => { + if (err) { + return reject(err); + } + if (valueset) { + resolve(new ValueSet(valueset)); + } + resolve(undefined); + }); + }); + } + static async processSubQuestionnaires(questionnaire: Questionnaire) { + const extensions = questionnaire.extension || []; + const contained = questionnaire.contained || []; + const containedList: ResourceTable = {}; + contained.forEach(item => { + if (item.id) { + containedList[item.id] = item; + } + }); + const containedSize = Object.keys(containedList).length; + const items = questionnaire.item || []; + await this.processItemList(items, extensions, containedList); + questionnaire.item = items; + const containedValues = Object.values(containedList); + if (containedSize !== containedValues.length) { + questionnaire.contained = containedValues; + } + return questionnaire; + } + static async processItemList( + items: QuestionnaireItem[], + extensions: Extension[], + containedList: ResourceTable + ) { + if (items.length === 0) { + return; + } + for (let i = 0; i < items.length; ) { + const subItems = await this.processItem(items[i], extensions, containedList); + let increment = 0; + if (subItems !== undefined && subItems.length !== 0) { + if (subItems.length === 1) { + items[i] = subItems[0]; + } else { + items.splice(i, 1); + subItems.forEach((e, j) => { + items.splice(i + j, 0, e); //replace old item with new expanded version + }); + } + increment = subItems.length; + } + i = i + increment; + } + } + static async processItem( + item: QuestionnaireItem, + extensions: Extension[], + containedList: ResourceTable + ) { + const ext = this.getExtension( + item, + 'http://hl7.org/fhir/StructureDefinition/sub-questionnaire' + ); + if (ext) { + const subQ = ext.valueCanonical; + if (subQ) { + // not undefind + let id = subQ; + const parts = subQ.split('/'); + if (id.length > 1) { + id = parts[1]; + } + let expandRootItem = false; + const expandExt = this.getExtension( + item, + 'http://hl7.org/fhir/StructureDefinition/sub-questionnaire-expand' + ); + if (expandExt && expandExt.valueBoolean) { + expandRootItem = expandExt.valueBoolean; + } + const subQuestionnaire = await this.findQuestionnaire(id); + if (subQuestionnaire) { + const subExtensions = subQuestionnaire.extension || []; + subExtensions.forEach(ext => { + const matches = extensions.filter(ext2 => { + return ext2.valueCanonical === ext.valueCanonical; + }); + if (matches.length === 0) { + // no matches, merge extension + extensions.push(ext); + } + }); + subQuestionnaire.contained?.forEach(containedItem => { + if (containedItem.id) { + containedList[containedItem.id] = containedItem; + } + }); + const rootItems = subQuestionnaire.item || []; + if (!expandRootItem || rootItems.length > 1) { + return rootItems; + } else { + return rootItems[0].item; + } + } else { + return [item]; + } + } else { + return [item]; + } + } + if (item.item) { + await this.processItemList(item.item, extensions, containedList); + } + return [item]; + } + static getExtension(item: QuestionnaireItem, url: string) { + return item.extension?.find(ext => { + return ext.url === url; + }); + } + static async processValueSets(questionnaire: Questionnaire) { + const valueSetMap: ValueSetMap = {}; + if (questionnaire.item) { + await this.findAndReplaceValueSetReferences(questionnaire.item, valueSetMap); + } + const keys = Object.keys(valueSetMap); + if (keys.length > 0) { + if (questionnaire.contained === undefined) { + questionnaire.contained = []; + } + keys.forEach(key => { + const valueSet = valueSetMap[key]; + questionnaire.contained?.push(valueSet); + }); + } + return questionnaire; + } + static async findAndReplaceValueSetReferences( + items: QuestionnaireItem[], + valueSetMap: ValueSetMap + ) { + for (const itemComponent of items) { + if (itemComponent.answerValueSet !== undefined) { + if (!itemComponent.answerValueSet.startsWith('#')) { + const valueSetId = await this.findAndLoadValueSet( + itemComponent.answerValueSet, + valueSetMap + ); + if (valueSetId) { + itemComponent.answerValueSet = `#${valueSetId}`; + } else { + this.logger.warn(`Referenced ValueSet: ${itemComponent.answerValueSet} was not found`); + } + } + } + if (itemComponent.item) { + await this.findAndReplaceValueSetReferences(itemComponent.item, valueSetMap); + } + } + } + + static async findAndLoadValueSet(url: string, valueSetMap: ValueSetMap) { + if (url in Object.keys(valueSetMap)) { + return valueSetMap[url].id; + } + const valueSet = await this.findValueSetByUrl(url); + if (valueSet) { + valueSet.url = `#${valueSet.id}`; + console.log(`findAndLoadValueSet: ${valueSet?.id}`); + + valueSetMap[url] = valueSet; + return valueSet.id; + } else { + return undefined; + } + } +} diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 84a978c8..a7fb29e1 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -9,6 +9,7 @@ import * as path from 'path'; import * as fs from 'fs'; import * as process from 'process'; import crypto from 'crypto'; +import { QuestionnaireUtilities } from './questionnaireUtilities'; const re = /(?:\.([^.]+))?$/; @@ -58,6 +59,7 @@ export class FhirUtilities { case 'Library': collectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}`; historyCollectionString = `${constants.COLLECTION.LIBRARY}_${baseVersion}_History`; + await QuestionnaireUtilities.processLibraryCodeFilters(resource, {}); break; case 'Patient': collectionString = `${constants.COLLECTION.PATIENT}_${baseVersion}`; diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index 6949e2bb..37c183ed 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -35,14 +35,14 @@ const codeMap: { [key: string]: Link[] } = { { label: 'Patient Status Update Form', appContext: - 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientStatus', + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus', type: 'smart', url: new URL(config.smart.endpoint) }, { label: 'Patient Enrollment Form', appContext: - 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TuralioRemsPatientEnrollment', + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment', type: 'smart', url: new URL(config.smart.endpoint) } @@ -79,7 +79,7 @@ const codeMap: { [key: string]: Link[] } = { { label: 'Patient Enrollment Form', appContext: - 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/IPledgeRemsPatientEnrollment', + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPatientEnrollment', type: 'smart', url: new URL(config.smart.endpoint) } @@ -109,7 +109,7 @@ const codeMap: { [key: string]: Link[] } = { { label: 'Patient Enrollment Form', appContext: - 'questionnaire=http://localhost:8090/fhir/r4/Questionnaire/TIRFRemsPatientEnrollment', + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFRemsPatientEnrollment', type: 'smart', url: new URL(config.smart.endpoint) } diff --git a/src/lib/winston.ts b/src/lib/winston.ts index e3dc5909..975e5688 100644 --- a/src/lib/winston.ts +++ b/src/lib/winston.ts @@ -15,7 +15,11 @@ const applicationTransports = []; // Create a console transport const transportConsole = new transports.Console({ level: logConfig.level, - format: winston.format.combine(winston.format.colorize(), winston.format.json()) + format: winston.format.combine( + winston.format.prettyPrint(), + winston.format.json(), + winston.format.splat() + ) }); applicationTransports.push(transportConsole); diff --git a/src/services/questionnaire.service.ts b/src/services/questionnaire.service.ts index 79ede48f..ed6a1bab 100644 --- a/src/services/questionnaire.service.ts +++ b/src/services/questionnaire.service.ts @@ -1,6 +1,8 @@ import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from '../fhir/utilities'; +import { Questionnaire } from 'fhir/r4'; +import { QuestionnaireUtilities } from '../fhir/questionnaireUtilities'; module.exports.searchById = (args: any) => new Promise((resolve, reject) => { @@ -8,12 +10,11 @@ module.exports.searchById = (args: any) => console.log('Questionnaire >>> searchById: -- ' + id); const Questionnaire = FhirUtilities.getQuestionnaire(base_version); - // Grab an instance of our DB and collection const db = Globals.database; const collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRE}_${base_version}`); // Query our collection for this observation - collection.findOne({ id: id.toString() }, (err: any, questionnaire: any) => { + collection.findOne({ id: id.toString() }, (err: any, questionnaire: Questionnaire) => { if (err) { console.log('Error with Questionnaire.searchById: ', err); return reject(err); @@ -32,3 +33,25 @@ module.exports.create = (args: any, req: any) => const { base_version } = args; FhirUtilities.store(resource, resolve, reject, base_version); }); + +module.exports.questionnairePackage = (args: any, context: any, logger: any) => { + logger.info('Running Questionnaire Package /:id/$questionnaire-package'); + return new Promise((resolve, reject) => { + const { base_version, id } = args; + const Questionnaire = FhirUtilities.getQuestionnaire(base_version); + const db = Globals.database; + const collection = db.collection(`${constants.COLLECTION.QUESTIONNAIRE}_${base_version}`); + collection.findOne({ id: id.toString() }, async (err: any, questionnaire: Questionnaire) => { + if (err) { + console.log('Error finding Questionnaire: ', err); + return reject(err); + } + if (questionnaire) { + const unprocessedQ = new Questionnaire(questionnaire); + const parameters = QuestionnaireUtilities.createPackageFromQuestionnaire(unprocessedQ); + resolve(parameters); + } + resolve(''); + }); + }); +}; From ca3da52411276bac443c717d79959e7951368960 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Tue, 24 Jan 2023 19:24:35 -0500 Subject: [PATCH 38/83] add cds files with elm embedded --- .../R4/files/IPledgePrepopulation-0.1.0.cql | 10 + ...rescriberEnrollmentPrepopulation-0.1.0.cql | 51 + .../IPledge/R4/files/IPledgeRule-0.1.0.cql | 45 + .../Library-R4-IPledge-prepopulation.json | 99 + ...dgePrescriberEnrollment-prepopulation.json | 113 + .../resources/Questionnaire-R4-IPledge.json | 723 ++++ ...naire-R4-PrescriberEnrollment-IPledge.json | 421 ++ .../CRD-DTR/IPledge/TopicMetadata.json | 17 + .../BasicClinicalInfoPrepopulation-0.1.0.cql | 156 + .../BasicPatientInfoPrepopulation-0.2.0.cql | 47 + ...sicPractitionerInfoPrepopulation-0.1.0.cql | 57 + ...CDS_Connect_Commons_for_FHIRv400-1.0.2.cql | 584 +++ .../Shared/R4/files/DTRHelpers-0.1.0.cql | 109 + .../Shared/R4/files/FHIRHelpers-4.0.0.cql | 270 ++ ...ry-R4-BasicClinicalInfo-prepopulation.json | 40 + ...ary-R4-BasicPatientInfo-prepopulation.json | 35 + ...4-BasicPractitionerInfo-prepopulation.json | 35 + ...y-R4-CDS_Connect_Commons_for_FHIRv400.json | 32 + .../R4/resources/Library-R4-DTRHelpers.json | 32 + .../Library-R4-FHIRHelpers-4.0.0.json | 25 + .../Questionnaire-R4-AssessmentAndPlan.json | 64 + .../resources/Questionnaire-R4-Encounter.json | 85 + .../Questionnaire-R4-PatientInfo.json | 130 + .../Questionnaire-R4-PatientInfoBase.json | 115 + .../Questionnaire-R4-PatientSignature.json | 76 + .../Questionnaire-R4-PhysicalExam.json | 252 ++ .../Questionnaire-R4-PractitionerInfo.json | 121 + ...Questionnaire-R4-PractitionerInfoBase.json | 106 + .../Questionnaire-R4-ProviderSignature.json | 91 + .../Questionnaire-R4-ReviewOfSystem.json | 3527 +++++++++++++++++ .../Questionnaire-R4-Subjective.json | 113 + .../Questionnaire-R4-VitalSigns.json | 890 +++++ .../ValueSet-R4-administrative-gender.json | 142 + .../ValueSet-R4-condition-clinical.json | 109 + .../ValueSet-R4-medicationrequest-status.json | 129 + .../ValueSet-R4-timing-abbreviation.json | 220 + .../ValueSet-R4-yes-no-unknown-not-asked.json | 33 + .../R4/resources/ValueSet-R4-yes-no.json | 45 + .../TIRF/R4/files/TIRFPrepopulatiom-0.1.0.cql | 0 ...rescriberEnrollmentPrepopulation-0.1.0.cql | 51 + .../CRD-DTR/TIRF/R4/files/TIRFRule-0.1.0.cql | 44 + ...IRFPrescriberEnrollment-prepopulation.json | 113 + ...-Prescriber-Knowledge-Assessment-TIRF.json | 378 ++ ...ionnaire-R4-PrescriberEnrollment-TIRF.json | 425 ++ .../R4/resources/Questionnaire-R4-TIRF.json | 814 ++++ .../CRD-DTR/TIRF/TopicMetadata.json | 17 + .../R4/files/TuralioPrepopulation-0.1.0.cql | 130 + ...rescriberEnrollmentPrepopulation-0.1.0.cql | 62 + .../Turalio/R4/files/TuralioRule-0.1.0.cql | 76 + .../Library-R4-Turalio-prepopulation.json | 99 + ...lioPrescriberEnrollment-prepopulation.json | 113 + ...re-R4-Prescriber-Knowledge-Assessment.json | 360 ++ ...Questionnaire-R4-PrescriberEnrollment.json | 517 +++ ...Questionnaire-R4-Turalio-ProgressNote.json | 273 ++ .../resources/Questionnaire-R4-Turalio.json | 1172 ++++++ .../CRD-DTR/Turalio/TopicMetadata.json | 17 + 56 files changed, 13810 insertions(+) create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrescriberEnrollmentPrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/files/IPledgeRule-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-IPledge.json create mode 100644 src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-PrescriberEnrollment-IPledge.json create mode 100644 src/cds-library/CRD-DTR/IPledge/TopicMetadata.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/files/BasicClinicalInfoPrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/Shared/R4/files/BasicPatientInfoPrepopulation-0.2.0.cql create mode 100644 src/cds-library/CRD-DTR/Shared/R4/files/BasicPractitionerInfoPrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/Shared/R4/files/CDS_Connect_Commons_for_FHIRv400-1.0.2.cql create mode 100644 src/cds-library/CRD-DTR/Shared/R4/files/DTRHelpers-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/Shared/R4/files/FHIRHelpers-4.0.0.cql create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-AssessmentAndPlan.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Encounter.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfo.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfoBase.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientSignature.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PhysicalExam.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfo.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfoBase.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ProviderSignature.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ReviewOfSystem.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Subjective.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-VitalSigns.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-administrative-gender.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-condition-clinical.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-medicationrequest-status.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-timing-abbreviation.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no-unknown-not-asked.json create mode 100644 src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no.json create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrepopulatiom-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrescriberEnrollmentPrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/files/TIRFRule-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment-TIRF.json create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-PrescriberEnrollment-TIRF.json create mode 100644 src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json create mode 100644 src/cds-library/CRD-DTR/TIRF/TopicMetadata.json create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrescriberEnrollmentPrepopulation-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/files/TuralioRule-0.1.0.cql create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment.json create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-PrescriberEnrollment.json create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio-ProgressNote.json create mode 100644 src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio.json create mode 100644 src/cds-library/CRD-DTR/Turalio/TopicMetadata.json diff --git a/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrepopulation-0.1.0.cql new file mode 100644 index 00000000..4960e2fe --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrepopulation-0.1.0.cql @@ -0,0 +1,10 @@ +library IPledgePrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers +include CDS_Connect_Commons_for_FHIRv400 version '1.0.2' called CDS +include DTRHelpers version '0.1.0' called DTR + +codesystem "ICD-10-CM": 'http://hl7.org/fhir/sid/icd-10-cm' +codesystem "LOINC": 'http://loinc.org' +codesystem "SNOMED-CT": 'http://snomed.info/sct' +codesystem "RXNORM": 'http://www.nlm.nih.gov/research/umls/rxnorm' diff --git a/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrescriberEnrollmentPrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrescriberEnrollmentPrepopulation-0.1.0.cql new file mode 100644 index 00000000..6e6b1afb --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgePrescriberEnrollmentPrepopulation-0.1.0.cql @@ -0,0 +1,51 @@ +library IPledgePrescriberEnrollmentPrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + +codesystem "ICD-10-CM": 'http://hl7.org/fhir/sid/icd-10-cm' +codesystem "LOINC": 'http://loinc.org' +codesystem "SNOMED-CT": 'http://snomed.info/sct' +codesystem "RXNORM": 'http://www.nlm.nih.gov/research/umls/rxnorm' + +code "Oncologist":'394592004' from "SNOMED-CT" + +parameter device_request DeviceRequest +parameter service_request ServiceRequest +parameter medication_request MedicationRequest + +context Patient + +define Today: Today() + +define "SigningProviderReference": Coalesce(device_request.performer.reference.value, service_request.performer.reference.value, medication_request.requester.reference.value) +// Get Practitioner +define OrderingProvider: singleton from ( + [Practitioner] practitioner + where ('Practitioner/' + practitioner.id) = SigningProviderReference) + +define Qualifications: singleton from ( + "OrderingProvider".qualification[0].code.coding[0].code.value) + +define Credentials: {Qualifications} + +define PractitionerRole: singleton from ( + [PractitionerRole] prole + where (prole.practitioner.reference.value) = SigningProviderReference) + +define Specialty: FHIRHelpers.ToConcept("PractitionerRole".specialty[0] as FHIR.CodeableConcept).codes + +define PreferredCommunication: {(singleton from ( + "OrderingProvider".telecom telecom where telecom.rank.value = 1)).system.value} + +define OrgName: ([Organization] org).name.value + +define MD: (singleton from ( + "OrderingProvider".identifier identifier + where identifier.type.coding[0].code = 'MD')).value.value + +define ValidIPledgeCredentials: + from "OrderingProvider".qualification qualification + where qualification.identifier.system.value = 'http://www.nlm.nih.gov/research/umls/rxnorm' and qualification.identifier.value.value = '6064' + +define ThirdPartyCredentials: ValidIPledgeCredentials[0].code.text.value +define ThirdPartyIssuer: ValidIPledgeCredentials[0].issuer.display.value \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgeRule-0.1.0.cql b/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgeRule-0.1.0.cql new file mode 100644 index 00000000..9ecc441a --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/files/IPledgeRule-0.1.0.cql @@ -0,0 +1,45 @@ +library IPledgeRule version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + + +parameter Patient Patient +parameter medication_request MedicationRequest +parameter medication_dispense MedicationDispense +parameter medication_statement MedicationStatement + +define RULE_APPLIES: + true + +define PRIORAUTH_REQUIRED: + false + +define DOCUMENTATION_REQUIRED: + true + +define RESULT_InfoLink: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_REMS_Document.pdf' + +define INFO_PATIENT_FactSheet: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Fact_Sheet.pdf' + +define INFO_PATIENT_GuideForPatientsWhoCanGetPregnant: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Guide_for_Patients_Who_Can_Get_pregnant.pdf' +define INFO_PATIENT_ContraceptiveCounselingGuide: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Contraception_Counseling_Guide.pdf' +define INFO_PRESCRIBER_PrescriberGuide: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Prescriber_Guide.pdf' +define INFO_PRESCRIBER_ComprehensionQuestions: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Comprehension_Questions.pdf' + +define RESULT_QuestionnaireOrderUri: + 'Questionnaire/IPledgeRemsPatientEnrollment' + +define RESULT_QuestionnairePrescriberEnrollmentUri: + 'Questionnaire/IPledgeRemsPrescriberEnrollmentForm' + +define RESULT_requestId: + medication_request + +define RESULT_dispense: + medication_dispense \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json new file mode 100644 index 00000000..85880ef1 --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json @@ -0,0 +1,99 @@ +{ + "resourceType": "Library", + "id": "IPledge-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/IPledge-prepopulation", + "name": "IPledge-prepopulation", + "version": "0.1.0", + "title": "IPledge Prepopulation", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + }, + { + "type": "depends-on", + "resource": "Library/CDS_Connect_Commons_for_FHIRv400" + }, + { + "type": "depends-on", + "resource": "Library/DTRHelpers" + } + ], + "dataRequirement": [ + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.81" + } + ] + }, + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.198" + } + ] + }, + { + "type": "Procedure", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.90" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.192" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.193" + } + ] + }, + { + "type": "Observation" + }, + { + "type": "MedicationStatement", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197" + } + ] + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBJUGxlZGdlUHJlcG9wdWxhdGlvbiAgdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIHZlcnNpb24gJzEuMC4yJyBjYWxsZWQgQ0RTCmluY2x1ZGUgRFRSSGVscGVycyB2ZXJzaW9uICcwLjEuMCcgY2FsbGVkIERUUgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwo=" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiSVBsZWRnZVByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0LCJzdGFydENoYXIiOjEsImVuZExpbmUiOjQsImVuZENoYXIiOjY3LCJtZXNzYWdlIjoiQ291bGQgbm90IGxvYWQgc291cmNlIGZvciBsaWJyYXJ5IENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeVZlcnNpb25JZCI6IjEuMC4yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IklQbGVkZ2VQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NSwic3RhcnRDaGFyIjoxLCJlbmRMaW5lIjo1LCJlbmRDaGFyIjo0NSwibWVzc2FnZSI6IkNvdWxkIG5vdCBsb2FkIHNvdXJjZSBmb3IgbGlicmFyeSBEVFJIZWxwZXJzLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiRFRSSGVscGVycyIsInRhcmdldEluY2x1ZGVMaWJyYXJ5VmVyc2lvbklkIjoiMC4xLjAiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IklQbGVkZ2VQcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJjb2RlU3lzdGVtcyI6eyJkZWYiOlt7Im5hbWUiOiJJQ0QtMTAtQ00iLCJpZCI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbSIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiTE9JTkMiLCJpZCI6Imh0dHA6Ly9sb2luYy5vcmciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9LHsibmFtZSI6IlNOT01FRC1DVCIsImlkIjoiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiUlhOT1JNIiwiaWQiOiJodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifV19fX0=" + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json new file mode 100644 index 00000000..23c1e32d --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json @@ -0,0 +1,113 @@ +{ + "resourceType": "Library", + "id": "IPledgePrescriberEnrollment-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/IPledgePrescriberEnrollment-prepopulation", + "name": "IPledgePrescriberEnrollment-prepopulation", + "version": "0.1.0", + "title": "IPledgePrescriberEnrollment Prepopulation", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + }, + { + "type": "depends-on", + "resource": "Library/CDS_Connect_Commons_for_FHIRv400" + }, + { + "type": "depends-on", + "resource": "Library/DTRHelpers" + } + ], + "dataRequirement": [ + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.81" + } + ] + }, + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.198" + } + ] + }, + { + "type": "Procedure", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.90" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.192" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.193" + } + ] + }, + { + "type": "Observation" + }, + { + "type": "MedicationStatement", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197" + } + ] + }, + { + "type": "Practitioner" + }, + { + "type": "PractitionerRole", + "subjectCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/ValueSet/subject-type", + "code": "Practitioner" + } + ] + } + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBJUGxlZGdlUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uICB2ZXJzaW9uICcwLjEuMCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMCcKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgpjb2Rlc3lzdGVtICJJQ0QtMTAtQ00iOiAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtJwpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJwpjb2Rlc3lzdGVtICJTTk9NRUQtQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKY29kZXN5c3RlbSAiUlhOT1JNIjogJ2h0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0nCgpjb2RlICJPbmNvbG9naXN0IjonMzk0NTkyMDA0JyBmcm9tICJTTk9NRUQtQ1QiCgpwYXJhbWV0ZXIgZGV2aWNlX3JlcXVlc3QgRGV2aWNlUmVxdWVzdApwYXJhbWV0ZXIgc2VydmljZV9yZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0CnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lIFRvZGF5OiBUb2RheSgpCgpkZWZpbmUgIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSI6IENvYWxlc2NlKGRldmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIHNlcnZpY2VfcmVxdWVzdC5wZXJmb3JtZXIucmVmZXJlbmNlLnZhbHVlLCBtZWRpY2F0aW9uX3JlcXVlc3QucmVxdWVzdGVyLnJlZmVyZW5jZS52YWx1ZSkKLy8gR2V0IFByYWN0aXRpb25lcgpkZWZpbmUgT3JkZXJpbmdQcm92aWRlcjogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJdIHByYWN0aXRpb25lcgogICAgd2hlcmUgKCdQcmFjdGl0aW9uZXIvJyArIHByYWN0aXRpb25lci5pZCkgPSAgU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKZGVmaW5lIFF1YWxpZmljYXRpb25zOiBzaW5nbGV0b24gZnJvbSAoCiAgICAiT3JkZXJpbmdQcm92aWRlciIucXVhbGlmaWNhdGlvblswXS5jb2RlLmNvZGluZ1swXS5jb2RlLnZhbHVlKQoKZGVmaW5lIENyZWRlbnRpYWxzOiB7UXVhbGlmaWNhdGlvbnN9CgpkZWZpbmUgUHJhY3RpdGlvbmVyUm9sZTogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJSb2xlXSBwcm9sZQogICAgd2hlcmUgKHByb2xlLnByYWN0aXRpb25lci5yZWZlcmVuY2UudmFsdWUpID0gU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKZGVmaW5lIFNwZWNpYWx0eTogIEZISVJIZWxwZXJzLlRvQ29uY2VwdCgiUHJhY3RpdGlvbmVyUm9sZSIuc3BlY2lhbHR5WzBdIGFzIEZISVIuQ29kZWFibGVDb25jZXB0KS5jb2RlcwoKZGVmaW5lIFByZWZlcnJlZENvbW11bmljYXRpb246IHsoc2luZ2xldG9uIGZyb20gKAogICJPcmRlcmluZ1Byb3ZpZGVyIi50ZWxlY29tIHRlbGVjb20gd2hlcmUgdGVsZWNvbS5yYW5rLnZhbHVlID0gMSkpLnN5c3RlbS52YWx1ZX0KCmRlZmluZSBPcmdOYW1lOiAoW09yZ2FuaXphdGlvbl0gb3JnKS5uYW1lLnZhbHVlCgpkZWZpbmUgTUQ6IChzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLmlkZW50aWZpZXIgaWRlbnRpZmllcgogICAgd2hlcmUgaWRlbnRpZmllci50eXBlLmNvZGluZ1swXS5jb2RlID0gJ01EJykpLnZhbHVlLnZhbHVlCgpkZWZpbmUgVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHM6IAogIGZyb20gIk9yZGVyaW5nUHJvdmlkZXIiLnF1YWxpZmljYXRpb24gcXVhbGlmaWNhdGlvbiAKICAgIHdoZXJlIHF1YWxpZmljYXRpb24uaWRlbnRpZmllci5zeXN0ZW0udmFsdWUgPSAnaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybScgYW5kIHF1YWxpZmljYXRpb24uaWRlbnRpZmllci52YWx1ZS52YWx1ZSA9ICc2MDY0JwoKZGVmaW5lIFRoaXJkUGFydHlDcmVkZW50aWFsczogVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHNbMF0uY29kZS50ZXh0LnZhbHVlCmRlZmluZSBUaGlyZFBhcnR5SXNzdWVyOiBWYWxpZElQbGVkZ2VDcmVkZW50aWFsc1swXS5pc3N1ZXIuZGlzcGxheS52YWx1ZQ==" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiSVBsZWRnZVByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjIwLCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MjAsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJJUGxlZGdlUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MjAsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoyMCwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjo0MywiZW5kTGluZSI6NDgsImVuZENoYXIiOjQ3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjoxMzIsImVuZExpbmUiOjQ4LCJlbmRDaGFyIjoxMzYsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJ2ZXJzaW9uIjoiMC4xLjAifSwic2NoZW1hSWRlbnRpZmllciI6eyJpZCI6InVybjpobDctb3JnOmVsbSIsInZlcnNpb24iOiJyMSJ9LCJ1c2luZ3MiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJTeXN0ZW0iLCJ1cmkiOiJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEifSx7ImxvY2FsSWRlbnRpZmllciI6IkZISVIiLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwiaW5jbHVkZXMiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJGSElSSGVscGVycyIsInBhdGgiOiJGSElSSGVscGVycyIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInBhcmFtZXRlcnMiOnsiZGVmIjpbeyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6Im1lZGljYXRpb25fcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6Ik9uY29sb2dpc3QiLCJpZCI6IjM5NDU5MjAwNCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiU05PTUVELUNUIn19XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6IlF1YWxpZmljYXRpb25zIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sibmFtZSI6IlF1YWxpZmljYXRpb25zIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJQcmFjdGl0aW9uZXJSb2xlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJwcm9sZSIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InByYWN0aXRpb25lciIsInNjb3BlIjoicHJvbGUiLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6IlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJTcGVjaWFsdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZXMiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InNwZWNpYWx0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUHJhY3RpdGlvbmVyUm9sZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19LHsibmFtZSI6IlByZWZlcnJlZENvbW11bmljYXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoidGVsZWNvbSIsImV4cHJlc3Npb24iOnsicGF0aCI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJhbmsiLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19XX19LHsibmFtZSI6Ik9yZ05hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im9yZyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdfX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7Im5hbWUiOiJNRCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InR5cGUiLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiTUQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJWYWxpZElQbGVkZ2VDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJxdWFsaWZpY2F0aW9uIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiI2MDY0IiwidHlwZSI6IkxpdGVyYWwifV19XX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5SXNzdWVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJkaXNwbGF5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJpc3N1ZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fV19fX0=" + } + ] + } \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-IPledge.json b/src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-IPledge.json new file mode 100644 index 00000000..e98d8807 --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-IPledge.json @@ -0,0 +1,723 @@ +{ + "resourceType": "Questionnaire", + "id": "IPledgeRemsPatientEnrollment", + "name": "IPledgeRemsPatientEnrollment", + "title": "IPledge Rems Patient Enrollment", + "status": "draft", + "subjectType": [ + "Patient" + ], + "date": "2020-05-20", + "publisher": "Da Vinci DTR", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/IPledge-prepopulation" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPatientInfo-prepopulation" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPractitionerInfo-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Determine Patient Category", + "item": [ + { + "linkId": "1.1", + "text": "Before enrolling your patient in the iPLEDGE REMS, you must determine if this is a patient who can become pregnant. In the iPLEDGE REMS, the definition of a patient who can become pregnant is: • A patient who has not had a hysterectomy and/or bilateral oophorectomy • The patient is not post-menopausal • A patient who has not yet started menstruating • A patient who has had a tubal sterilization • A transgender male with viable female reproductive organs", + "type": "display" + }, + { + "linkId": "1.2", + "text": "Determine patient category", + "type": "group", + "item": [ + { + "linkId": "1.2.1", + "text": "Patient who can get pregnant", + "type": "boolean", + "initial": [ + { + "valueBoolean": false + } + ], + "required": true + } + ] + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Pregnancy Test Results", + "item": [ + { + "linkId": "2.1", + "text": "Enter in-office test results", + "type": "display" + }, + { + "linkId": "2.2", + "text": "In office pregnancy test result", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueCoding": { + "code": "77386006", + "system": "http://snomed.info/sct", + "display": "In-office pregnancy test is positive" + } + }, + { + "valueCoding": { + "code": "60001007", + "system": "http://snomed.info/sct", + "display": "In-office pregnancy test is negative" + } + } + ] + }, + { + "linkId": "2.3", + "text": "Date of in-office positive or negative pregnancy test (MM/DD/YYYY)", + "type": "date", + "required": true + } + ], + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "linkId": "3", + "type": "group", + "text": "Determine Risk Category", + "item": [ + { + "linkId": "3.1", + "text": "You have indicated that this patient is a patient who cannot become pregnant. The questions that follow will assign a risk category for this patient, based on the reproductive potential according to the requirements of the iPLEDGE REMS. All patients who cannot get pregnant are considered patients who can get pregnant unless one or more of the following applies: 1. Patient is cisgender male (born a male, aka cis-male) 2. Patient has had a hysterectomy 3. Patient has had a bilateral oophorectomy 4. Patient is post-menopausal", + "type": "display" + }, + { + "linkId": "3.2", + "text": "Please note that the following conditions DO NOT qualify a patient to be moved from the patient who can become pregnant risk category • Tubal sterilization • Male vasectomy • Abstinence • Patient has not had a first menstrual period (pre-menarche) • Patient is currently in menopause (but not yet post-menopausal)", + "type": "display" + }, + { + "linkId": "3.3", + "text": "Please acknowledge your understanding of the qualification criteria as presented in order to proceed with assigning a risk category for this patient.", + "type": "boolean" + } + ], + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": false + } + ] + }, + { + "linkId": "4", + "type": "group", + "text": "Confirm Risk Category", + "item": [ + { + "linkId": "4.1", + "text": "Is the patient cisgender male (born a male, aka cis-male)", + "type": "boolean", + "required": true + }, + { + "linkId": "4.2", + "text": "Has the patient had a hysterectomy?", + "type": "boolean", + "required": true + }, + { + "linkId": "4.3", + "text": "Has the patient had a bilateral oophorectomy?", + "type": "boolean", + "required": true + }, + { + "linkId": "4.4", + "text": "For the iPLEDGE REMS, a patient is considered post-menopausal upon cessation of previously occurring menses as a result of ovarian failure with documentation of hormonal deficiency by a certified healthcare provider (i.e., spontaneous menopause). Hormonal deficiency should be properly documented in the case of spontaneous menopause as follows: 1. If age > 54 years and with absence of normal menses: serum FSH (Follicle Stimulating Hormone) level elevated to within the post-menopausal range based on the laboratory reference range where the hormonal assay is performed 2. If age < 54 years and with the absence of normal menses: negative serum or urine -hCG with concurrently elevated serum FSH (Follicle Stimulating Hormone) level in the post-menopausal, depressed estradiol (E2) level in the post-menopausal range, and absent serum progesterone level, based on the laboratory reference ranges where the hormonal assay is performed.", + "type": "display" + }, + { + "linkId": "4.5", + "text": "Using the definition above, is the patient post-menopausal?", + "type": "boolean", + "required": true + } + ], + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": false + } + ] + }, + { + "linkId": "5", + "type": "group", + "text": "Enter Patient Information", + "item": [ + { + "linkId": "5.1", + "text": "First Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".FirstName" + } + } + ] + }, + { + "linkId": "5.2", + "text": "Middle Initial", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".MiddleInitial" + } + } + ] + }, + { + "linkId": "5.3", + "text": "Last Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".LastName" + } + } + ] + }, + { + "linkId": "5.4", + "text": "Address Line 1", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "5.5", + "text": "Address Line 2", + "type": "string", + "required": false + }, + { + "linkId": "5.6", + "text": "City", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "5.7", + "text": "State", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "5.8", + "text": "Zip", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "5.9", + "text": "Mobile Phone Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "5.10", + "text": "E-mail", + "type": "string", + "required": true + }, + { + "linkId": "5.11", + "text": "Date of Birth", + "type": "date", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".DateOfBirth" + } + } + ] + }, + { + "linkId": "5.12", + "text": "Preferred Method of Communication", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueCoding": { + "code": "email", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Email" + } + }, + { + "valueCoding": { + "code": "sms", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Text Message" + } + } + ] + } + ] + }, + { + "linkId": "6", + "type": "group", + "text": "Informed Consent (For All Patients)", + "item": [ + { + "linkId": "6.1", + "text": "To be completed by the patient (and parent or guardian if the patient is under age 18) and signed by the doctor. Read each item below and check the box provided if you understand each item and agree to follow your doctor's instructions. A parent or guardian of a patient under age 18 must also read and understand each item before signing the agreement. Do not sign this agreement, and do not take isotretinoin if there is anything that you do not understand about all the information you have received about using isotretinoin.", + "type": "display" + }, + { + "linkId": "6.2", + "text": "1. I understand that isotretinoin is a medicine used in patients 12 years of age and older, who are not pregnant for the treatment of severe nodular acne that cannot be cleared up by any other acne treatments, including antibiotics. In severe nodular acne, many red, swollen, tender lumps form in the skin. If untreated, severe nodular acne can lead to permanent scars.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.3", + "text": "2. My doctor has told me about my choices for treating my acne", + "type": "boolean", + "required": true + }, + { + "linkId": "6.4", + "text": "3. I understand that there are serious side effects that may happen while I am taking isotretinoin. These have been explained to me. These side effects include serious birth defects in babies of pregnant patients. [Note: There is a second informed consent about birth defects (for patients who can get pregnant)].", + "type": "boolean", + "required": true + }, + { + "linkId": "6.5", + "text": "4. I understand that some patients while taking isotretinoin or soon after stopping isotetrinoin, have become depressed or developed other serious mental problems. Symptoms of depression include sad, anxious or empty mood, irritability, acting on dangerous impulses, anger, loss of pleasure or interest in social or sport activities, sleeping too much or too little, changes in weight or appetite, school or work performance going down, or trouble concentrating. Some patients taking isotretinoin have had thoughts about hurting themselves or putting an end to their own lives (suicidal thoughts). Some people tried to end their own lives, and some people have ended their own lives. There were reports that some of these people did not appear depressed. There have been reports of patients on isotretinoin becoming aggressive or violent. Some people have had other signs of depression while taking isotretinoin (see #7).", + "type": "boolean", + "required": true + }, + { + "linkId": "6.6", + "text": "5. Before I start taking isotretinoin, I agree to tell my doctor if I have ever had symptoms of depression (see #7), been psychotic, attempted suicide, had any other mental problems, or take medicine for any of these problems. Being psychotic means having a loss of contact with reality, such as hearing voices or seeing things that are not there.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.7", + "text": "6. Before I start taking isotretinoin, I agree to tell my doctor if, to the best of my knowledge, anyone in my family has ever had symptoms of depression, been psychotic, attempted suicide, or had any other serious mental problems.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.8", + "text": "7. Once I start taking isotretinoin, I agree to stop using isotretinoin and tell my doctor right away if any of the following signs and symptoms of depression or psychosis happen. • Start to feel sad or have crying spells • Lose interest in activities I once enjoyed • Sleep too much or have trouble sleeping • Become more irritable, angry, or aggressive than usual (for example, temper outbursts, thoughts of violence) • Have a change in my appetite or body weight • Have trouble concentrating • Withdraw from my friends or family • Feel like I have no energy • Have feelings of worthlessness or guilt • Start having thoughts about hurting myself or taking my own life (suicidal thoughts) • Start acting on dangerous impulses • Start seeing or hearing things that are not real", + "type": "boolean", + "required": true + }, + { + "linkId": "6.9", + "text": "8. I agree to return to see my doctor every month I take isotretinoin to get a new prescription for isotretinoin, to check my progress, and to check for signs of side effects.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.10", + "text": "9. Isotretinoin wil be prescribed just for me - I will not share isotretinoin with other people because it may cause serious side effects, including birth defects.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.11", + "text": "10. I will not give blood while taking isotretinoin or for 1 moth after I stop taking isotretinoin. I understand that if someone who is pregnant gets my donated blood, their baby may be exposed to isotretinoin and may be born with serious birth defects.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.12", + "text": "11. I have read the iPLEDGE REMS Fact Sheet and other materials my provider provided me containing important safety information about isotretinoin. I understand all the information I received.", + "type": "boolean", + "required": true + }, + { + "linkId": "6.13", + "text": "12. My doctor and I have decided I should take isotretinoin. I understand that I must be qualified in the iPLEDGE REMS to have my prescription filled each month. I understand that I can stop taking isotretinoin at any time. I agree to tell my doctor if I stop taking isotretinoin.", + "type": "boolean", + "required": true + } + ] + }, + { + "linkId": "7", + "type": "group", + "text": "Informed Consent About Birth Defects (For Patients Who Can Get Pregnant)", + "item": [ + { + "linkId": "7.1", + "text": "About Birth Defects (for patients who can get pregnant): To be completed by the patient (and their parent or guardian if the patient is under age 18) and signed by their doctor. Read each item below and check in the box provided to show that you understand each item and agree to follow your doctor's instructions. Do not sign this consent, and do not take isotretinoin if there is anything that you do not understand. A parent or guardian of a minor patient (under 18) must also read and check each item before signing the consent.", + "type": "display" + }, + { + "linkId": "7.2", + "text": "1. I understand that there is a very high chance that my unborn baby could have life-threatening birth defects if I am pregnant or become pregnant while taking isotretinoin. This can happen with any amount and even if take for short periods of time. This is why I must not be pregnant while taking isotretinoin.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.3", + "text": "2. I understand that I must not get pregnant one month before, during the entire time of my treatment, and for one month after the end of my treatment with isotretinoin.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.4", + "text": "3. I understand that I must completely avoid having any sexual contact (penis-vaginal) with a partner who could get me pregnant, or I must use two separate effective forms of birth control (contraception) at the same time. The only exceptions are if I have had any surgery to remove the uterus (a hysterectomy) or both of my ovaries (bilateral oophorectomy), or my doctor has medically confirmed that I am post-menopausal.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.5", + "text": "4. I understand that hormonal birth control products are among the most effective forms of birth control. Combination birth control pills and other hormonal products include skin patches, shots, under-the-skin implants, vaginal rings, and intrauterine devices (IUDs). Any method of birth control can fail. That is why I must use two different birth control forms at the same time, starting one month before, during, and for one month after stopping therapy every time I have sexual contact (penis-vaginal) with a partner who could get me pregnant, even if one of the forms I choose is hormonal birth control.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.6", + "text": "5. I understand that the following are effective forms of birth control:", + "type": "boolean", + "required": true, + "item": [ + { + "linkId": "7.6.1", + "text": "Primary forms: • tying my tubes (tubal sterilization) • male vasectomy • intrauterine device • hormonal (combination birth control pills, skin patches, shots, under-the-skin implants, or vaginal rings)", + "type": "display" + }, + { + "linkId": "7.6.2", + "text": "Secondary forms, barrier: • male latex condom with or without spermicide • diaphragm with spermicide • cervical cap with spermicide", + "type": "display" + }, + { + "linkId": "7.6.3", + "text": "Other: • vaginal sponge (contains spermicide)", + "type": "display" + }, + { + "linkId": "7.6.4", + "text": "A diaphragm and cervical cap must each be used with spermicide, a special cream that kills sperm. I understand that at least one of my two forms of birth control must be a primary method.", + "type": "display" + } + ] + }, + { + "linkId": "7.7", + "text": "6. I will talk to my doctor about any medicines, including herbal products I plan to take during my isotretinoin treatment, because hormonal birth control forms may not work if I am taking certain medicines or herbal products.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.8", + "text": "7. I may receive a free birth control counseling session from a doctor or other family planning expert. My isotretinoin doctor can give me an iPLEDGE REMS Contraception Counseling Guide for this free consultation.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.9", + "text": "8. I must begin using the birth control forms I have chosen as described above at least one month before I start taking isotretinoin.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.10", + "text": "9. I cannot get my first prescription for isotretinoin unless my doctor has told me that I have two negative pregnancy test results. The first pregnancy test should be done when my doctor decides to prescribe isotretinoin. The second pregnancy test must be done in a lab during the first 5 days of my menstrual period right before starting isotretinoin therapy treatment, or as instructed by my doctor. I will then have one pregnancy test; in a lab: • every month during treatment • at the end of treatment • and 1 month after stopping treatment. I must not start taking isotretinoin until I am sure that I am not pregnant, have negative results from two pregnancy tests, and the second test has been done in a lab.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.11", + "text": "10. I have read and understand the materials my doctor has provided to me, including the iPLEDGE REMS Guide for Patients who Can Get Pregnant and iPLEDGE REMS Fact Sheet. I have received information on emergency birth control.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.12", + "text": "11. I must stop taking isotretinoin right away and call my doctor if I get pregnant, miss my expected menstrual period, stop using birth control, or have sexual contact (penis-vaginal) with a partner who could get me pregnant, without using my two birth control forms at any time.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.13", + "text": "12. My doctor provided me with information about the purpose and importance of providing information to the iPLEDGE REMS should I become pregnant while taking isotretinoin or within one month of the last dose. I understand that if I become pregnant, information about my pregnancy, my health, and my baby's health may be shared with the makers of isotretinoin, authorized parties who maintain the iPLEDGE REMS for the makers of isotretinoin, and government health regulatory authorities.", + "type": "boolean", + "required": true + }, + { + "linkId": "7.14", + "text": "13. I understand that being qualified to receive isotretinoin in the iPLEDGE REMS means that I: • have had two negative urine or blood pregnancy tests before receiving the first isotretinoin prescription. The second test must be done in a lab. I must have a negative result from a urine or blood pregnancy test done in a lab repeated each month before I receive another isotretinoin prescription • have chosen and agreed to use two forms of effective birth control at the same time. At least one method must be a primary method of birth control unless I have chosen never to have sexual contact (penis-vaginal) with a partner who could get me pregnant (abstinence), or I have undergone a hysterectomy or bilateral oophorectomy, or I have been medically confirmed to be post-menopausal. I must use two forms of birth control for at least one month before I start isotretinoin therapy. I must receive counseling, repeated on a monthly basis, about birth control and behaviors associated with an increased risk of pregnancy • have signed an Informed Consent For Patients Who Can Get Pregnant (for patients who can get pregnant) that contains warnings about the chance of possible birth defects if I am pregnant or becoming pregnant and my unborn baby is exposed to isotretinoin • have been informed of and understand the purpose and importance of providing information to the iPLEDGE REMS should I become pregnant while taking isotretinoin or within 1 month of the last dose • have interacted with the iPLEDGE REMS before starting isotretinoin and on a monthly basis to answer questions on the program requirements and to enter my two chosen forms of birth control", + "type": "boolean", + "required": true + }, + { + "linkId": "7.15", + "text": "14. My doctor has answered all my questions about isotretinoin, and I understand that it is my responsibility not to get pregnant one month before, during isotretinoin treatment, or for one month after I stop taking isotretinoin.", + "type": "boolean", + "required": true + } + + ], + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "linkId": "8", + "type": "group", + "text": "Patient Attestation", + "item": [ + { + "linkId": "8.1", + "text": "Patient Attestation", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueString": "Patient Attestation" + }, + { + "valueString": "Parent or Guardian Attestation" + } + ] + }, + { + "linkId": "8.2", + "text": "I now allow my doctor to begin my treatment with isotretinoin.", + "type": "display" + }, + { + "linkId": "8.3", + "text": "Patient Initials", + "type": "string", + "required": true + }, + { + "linkId": "8.4", + "text": "Patient Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".FullName" + } + } + ] + }, + { + "linkId": "8.5", + "text": "Patient Signature", + "type": "string", + "required": true + }, + { + "linkId": "8.6", + "text": "I authorize the above signature to be the legally binding equivalent of my handwritten signature.", + "type": "display" + } + ] + }, + { + "linkId": "9", + "type": "group", + "text": "Patient Counseling", + "item": [ + { + "linkId": "9.1", + "text": "I have counseled this patient on the following: • Requirement to use 2 effective forms of birth control together correctly all the time • Drug should not be shared with anyone, even any drug remaining after treatment • Blood should not be donated while taking isotretinoin • Patient REMS requirements", + "type": "boolean", + "required": true, + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "linkId": "9.2", + "text": "I have counseled this patient on the following: • Drug should not be shared with anyone, even any drug remaining after treatment • Blood should not be donated while taking isotretinoin • Patient REMS requirements", + "type": "boolean", + "required": true, + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": false + } + ] + }, + { + "linkId": "9.3", + "text": "I have prescribed (maximum) 30-day supply of isotretinoin", + "type": "boolean", + "required": true, + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": false + } + ] + }, + { + "linkId": "9.4", + "text": "In my opinion, this patient understands and is capable of complying with the requirements of the iPLEDGE REMS", + "type": "boolean", + "required": true + }, + { + "linkId": "9.5", + "text": "I have: • fully explained to the patient, the nature and purpose of isotretinoin treatment, including its benefits and risks to patients who can get pregnant • provided the patient with the appropriate educational materials, such as the iPLEDGE REMS Fact Sheet and asked the patient if there are any questions regarding treatment with isotretinoin • answered those questions to the best of my ability", + "type": "display", + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "linkId": "9.6", + "text": "I have: • fully explained to the patient, the nature and purpose of isotretinoin treatment, including its benefits and risks • provided the patient with the appropriate educational materials, such as the iPLEDGE REMS Fact Sheet and asked the patient if there are any questions regarding treatment with isotretinoin • answered those questions to the best of my ability", + "type": "display", + "enableWhen": [ + { + "question": "1.2.1", + "operator": "=", + "answerBoolean": false + } + ] + }, + { + "linkId": "9.7", + "text": "Doctor Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FullName" + } + } + ] + }, + { + "linkId": "9.8", + "text": "Doctor Signature", + "type": "string", + "required": true + }, + { + "linkId": "9.9", + "text": "I authorize the above signature to be the legally binding equivalent to my handwritten signature.", + "type": "display" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-PrescriberEnrollment-IPledge.json b/src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-PrescriberEnrollment-IPledge.json new file mode 100644 index 00000000..1ef581e3 --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/R4/resources/Questionnaire-R4-PrescriberEnrollment-IPledge.json @@ -0,0 +1,421 @@ +{ + "resourceType": "Questionnaire", + "id": "IPledgeRemsPrescriberEnrollmentForm", + "name": "IPledgeRemsPrescriberEnrollmentForm", + "title": "IPledge Rems Prescriber Enrollment Form", + "status": "draft", + "subjectType": [ + "Practitioner" + ], + "date": "2022-05-28", + "publisher": "FDA-REMS", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/IPledgePrescriberEnrollment-prepopulation" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPractitionerInfo-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "1.1", + "text": "Attention: This enrollment page is for licensed prescribers only. If you are a patient, you must be enrolled in iPLEDGE REMS by your prescriber. The iPLEDGE REMS will require prescribers to provide a National Provider Identifier (NPI). If your NPI is not on file with the iPLEDGE REMS, you will be prompted to enter your NPI upon first log-in to the iPLEDGE REMS. Failure to supply this identifier may result in your patients' prescriptions not being authorized for dispensing.", + "type": "display" + }, + { + "linkId": "1.2", + "text": "NPI Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".NPI" + } + } + ] + }, + { + "linkId": "1.3", + "text": "First Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FirstName" + } + } + ] + }, + { + "linkId": "1.4", + "text": "MI", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".MiddleInitial" + } + } + ] + }, + { + "linkId": "1.5", + "text": "Last Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".LastName" + } + } + ] + }, + { + "linkId": "1.6", + "text": "Suffix", + "type": "open-choice", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"IPledgePrescriberEnrollmentPrepopulation\".Credentials" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "MD", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "MD" + } + }, + { + "valueCoding": { + "code": "DO", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "DO" + } + }, + { + "valueCoding": { + "code": "NP", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "NP" + } + }, + { + "valueCoding": { + "code": "PA", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "PA" + } + }, + { + "valueCoding": { + "code": "Other", + "display": "Other" + } + } + ] + }, + { + "linkId": "1.7", + "text": "Specialty", + "type": "open-choice", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"IPledgePrescriberEnrollmentPrepopulation\".Specialty" + } + } + ] + }, + { + "linkId": "1.8", + "text": "Practice Name", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"IPledgePrescriberEnrollmentPrepopulation\".OrgName" + } + } + ] + }, + { + "linkId": "1.9", + "text": "Address Line 1", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "1.10", + "text": "Address Line 2", + "type": "string", + "required": false + }, + { + "linkId": "1.11", + "text": "City", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "1.12", + "text": "State", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "1.13", + "text": "Zip", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "1.14", + "text": "Phone Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "1.15", + "text": "Ext", + "type": "string", + "required": false + }, + { + "linkId": "1.16", + "text": "Fax Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Fax" + } + } + ] + }, + { + "linkId": "1.17", + "text": "Email", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + }, + { + "linkId": "1.18", + "text": "Preferred Method of Communication", + "type": "choice", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"IPledgePrescriberEnrollmentPrepopulation\".PreferredCommunication" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "email", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Email" + } + }, + { + "valueCoding": { + "code": "phone", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Phone" + } + } + ] + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Prescriber Certification (if applicable)", + "item": [ + { + "linkId": "2.1", + "text": "Prescriber Certification Type", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"IPledgePrescriberEnrollmentPrepopulation\".ThirdPartyCredentials" + } + } + ] + }, + { + "linkId": "2.2", + "text": "Prescriber Certification Issuer", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"IPledgePrescriberEnrollmentPrepopulation\".ThirdPartyIssuer" + } + } + ] + } + ] + }, + { + "linkId": "3", + "type": "group", + "text": "Prescriber Attestation", + "item": [ + { + "linkId": "3.1", + "text": "Prescribers can only activate their enrollment by affirming that they meet requirements and will comply with all iPLEDGE REMS requirements by attesting to the following points:", + "type": "display" + }, + { + "linkId": "3.2", + "text": "I know the risk and severity of fetal injury/birth defects from isotretinoin.", + "type": "display" + }, + { + "linkId": "3.3", + "text": "I know the risk factors for unplanned pregnancy and the effective measures for avoidance of unplanned pregnancy.", + "type": "display" + }, + { + "linkId": "3.4", + "text": "I have the expertise to provide the patient with detailed pregnancy prevention counseling, or I will refer the patient to an expert for such counseling, reimbursed by the manufacturer.", + "type": "display" + }, + { + "linkId": "3.5", + "text": "I will comply with the iPLEDGE REMS requirements described in the booklet, iPLEDGE REMS Prescriber Guide.", + "type": "display" + }, + { + "linkId": "3.6", + "text": "Before beginning treatment of patients who can become pregnant with isotretinoin, and on a monthly basis, the patient will be counseled to avoid pregnancy by using two forms of contraception simultaneously and continuously for at least one month prior to initiation of isotretinoin treatment, during isotretinoin treatment and for one month after discontinuing isotretinoin treatment, unless the patient commits to continuous abstinence, not having any sexual contact with a partner that could result in pregnancy.", + "type": "display" + }, + { + "linkId": "3.7", + "text": "I will not prescribe isotretinoin to any patient who can become pregnant until verifying the patient has a negative screening pregnancy test and monthly CLIA-certified (Clinical Laboratory Improvement Amendment) pregnancy tests. Patients should have a pregnancy test at the completion of the entire course of isotretinoin and another pregnancy test one month later.", + "type": "display" + }, + { + "linkId": "3.8", + "text": "I will report any pregnancy case that I become aware of while the patient who can become pregnant is on isotretinoin or one month after the last dose to the pregnancy registry.", + "type": "display" + }, + { + "linkId": "3.9", + "type": "choice", + "answerOption": [ + { + "valueString": "I attest to the statements above" + }, + { + "valueString": "I do not attest to the statements above" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/IPledge/TopicMetadata.json b/src/cds-library/CRD-DTR/IPledge/TopicMetadata.json new file mode 100644 index 00000000..a6d33c1f --- /dev/null +++ b/src/cds-library/CRD-DTR/IPledge/TopicMetadata.json @@ -0,0 +1,17 @@ +{ + "topic": "IPledge", + "payers": [ + "cms" + ], + "mappings": [ + { + "codeSystem": "rxnorm", + "codes":[ + "6064" + ] + } + ], + "fhirVersions": [ + "R4" + ] +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/files/BasicClinicalInfoPrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/Shared/R4/files/BasicClinicalInfoPrepopulation-0.1.0.cql new file mode 100644 index 00000000..e56f617b --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/files/BasicClinicalInfoPrepopulation-0.1.0.cql @@ -0,0 +1,156 @@ +library BasicClinicalInfoPrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + +codesystem "HL7-V2-0136": 'http://terminology.hl7.org/CodeSystem/v2-0136' + +code "Yes": 'Y' from "HL7-V2-0136" display 'Yes' +code "No": 'N' from "HL7-V2-0136" display 'No' + +parameter device_request DeviceRequest +parameter service_request ServiceRequest +parameter medication_request MedicationRequest + +context Patient + +define "Today": Today() + +define "OrderingProviderReference": Coalesce(device_request.performer.reference.value, service_request.performer.reference.value, medication_request.performer.reference.value) +define "OrderingProvider": singleton from ( + [Practitioner] practitioner + where ('Practitioner/' + practitioner.id) = "OrderingProviderReference") + +define "RequestEncounterReference": Coalesce(device_request.encounter.reference.value, service_request.encounter.reference.value, medication_request.encounter.reference.value) +define "RequestEncounter": + [Encounter] E + where 'Encounter/'+ E.id = "RequestEncounterReference" + +define "RequestEncounterDate": + if exists("RequestEncounter") then "RequestEncounter".period.start.value + else null + +define "RequestEncounterParticipants": "RequestEncounter".participant +define "RequestEncounterFirstParticipantReference": + if exists("RequestEncounterParticipants") + then "RequestEncounterParticipants"[0].individual.reference.value + else null + +define "IsEncounterProviderSameAsOrderingProvider": "OrderingProviderReference" = "RequestEncounterFirstParticipantReference" + +define "OrderingProviderName": singleton from ( + ("OrderingProvider".name name where name.use.value = 'official') + union + "OrderingProvider".name) + +// Get Practitioner's Name elements +define "OrderingProviderLastName": "OrderingProviderName".family.value +define "OrderingProviderMiddleInitial": GetMiddleInitials("OrderingProviderName") +define "OrderingProviderFirstName": "OrderingProviderName".given[0].value +define "OrderingProviderFullName": + "OrderingProviderFirstName" + ' ' + "OrderingProviderMiddleInitial" + ' ' + "OrderingProviderLastName" + +// Get Practitioner's NPI +define "OrderingProviderNPI": (singleton from ( + "OrderingProvider".identifier identifier + where identifier.system.value = 'http://hl7.org/fhir/sid/us-npi')).value.value + +// Encounter provider's information +define "EncounterProviderLastName": + if "IsEncounterProviderSameAsOrderingProvider" then "OrderingProviderLastName" + else null + +define "EncounterProviderMiddleInitial": + if "IsEncounterProviderSameAsOrderingProvider" then "OrderingProviderMiddleInitial" + else null + +define "EncounterProviderFirstName": + if "IsEncounterProviderSameAsOrderingProvider" then "OrderingProviderFirstName" + else null + +define "EncounterProviderFullName": + if "IsEncounterProviderSameAsOrderingProvider" then "OrderingProviderFullName" + else null + +define "EncounterProviderNPI": + if "IsEncounterProviderSameAsOrderingProvider" then "OrderingProviderNPI" + else null + +define function GetMiddleInitials(name FHIR.HumanName): + Substring(Combine((name.given given return Substring(given.value,0,1)),', '),3) + + +/* This is a work around to prepopulate with Yes answer for Yes/No question. + The blocking issue is that when LHC form control merge Questionnaire (the compiled static form) + and QuestionnaireResponse (the CQL expression results) to create a form representation, + the initial value in Questionnaire are ingored. + So we cannot use Questionnaire initial to setup the default value. +*/ +define AnswerYes: "Yes" +define AnswerNo: "No" + +define Allergies: + CodesFromAllergies(ConfirmedAllergies([AllergyIntolerance])) + +define function CodesFromAllergies(AllergyList List): + distinct(flatten( + AllergyList C + let AllergyCodings: + (C.code.coding) CODING where CODING.system.value in { + 'http://www.nlm.nih.gov/research/umls/rxnorm' + } + return FHIRHelpers.ToCode(CODING) + return AllergyCodings + )) + +define function ConfirmedAllergies(AllergyList List): + AllergyList C where C.verificationStatus.coding.code = 'confirmed' + +define "AllDiagnoses": ActiveConfirmedDiagnoses([Condition]) + +define function ActiveConfirmedDiagnoses(CondList List): + distinct( + flatten( + CondList C + let DiagnosesCodings: + (C.code.coding) CODING where CODING.system.value in { + 'http://hl7.org/fhir/sid/icd-10', + 'http://hl7.org/fhir/sid/icd-10-cm', + 'http://snomed.info/sct' + } + return FHIRHelpers.ToCode(CODING) + where C.verificationStatus.coding.code = 'confirmed' + and C.clinicalStatus.coding.code in {'active', 'relapse'} + and exists(DiagnosesCodings) + return DiagnosesCodings + ) + ) +define "AllProcedures": ProcedureCoding([Procedure]) +define function ProcedureCoding(ProcedureList List): + distinct( + flatten( + ProcedureList P + let ProcedureCodings: + (P.code.coding) CODING + return FHIRHelpers.ToCode(CODING) + return ProcedureCodings + ) + ) + + define "True": true + + define "MedicationTupleList": GetMedicationsTupleList([MedicationStatement]) + define function GetMedicationsTupleList(MedStatementList List): + distinct( + flatten( + MedStatementList MedStatement + let MedicationList: + (MedStatement.medication.coding) CODING + return Tuple { + RxNorm: FHIRHelpers.ToCode(CODING).display + '-' + FHIRHelpers.ToCode(CODING).code , + Description: FHIRHelpers.ToCode(CODING).display + } + return MedicationList + ) + ) + + diff --git a/src/cds-library/CRD-DTR/Shared/R4/files/BasicPatientInfoPrepopulation-0.2.0.cql b/src/cds-library/CRD-DTR/Shared/R4/files/BasicPatientInfoPrepopulation-0.2.0.cql new file mode 100644 index 00000000..64f91c3e --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/files/BasicPatientInfoPrepopulation-0.2.0.cql @@ -0,0 +1,47 @@ +library BasicPatientInfoPrepopulation version '0.2.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + +parameter device_request DeviceRequest +parameter service_request ServiceRequest +parameter medication_request MedicationRequest + +context Patient + +define function GetMiddleInitials(name FHIR.HumanName): + Substring(Combine((name.given given return Substring(given.value,0,1)),', '),3) + +define Today: Today() + +// Grab patient FHIR HumanName +define Name: singleton from (Patient.name name where name.use.value = 'official') + +// Extract useful name elements +define LastName: "Name".family.value +define MiddleInitial: GetMiddleInitials("Name") +define FirstName: "Name".given[0].value + +define FullName: + Coalesce("FirstName" + ' ' + "MiddleInitial" + ' ' + "LastName", "FirstName" + ' ' + "LastName") + +define Gender: Patient.gender.value +define DateOfBirth: Patient.birthDate.value + +define "RequestCoverage": Coalesce(device_request.insurance, service_request.insurance, medication_request.insurance) + +define CoverageResource: singleton from ( + [Coverage] coverage + // pull coverage resource id from the device request insurance extension + where ('Coverage/' + coverage.id) = RequestCoverage[0].reference.value) + +define MedicareId: "CoverageResource".subscriberId.value + +// Get Patient home address +define HomeAddress: singleton from (Patient.address address where address.use.value = 'home') +define Line: HomeAddress.line[0].value +define City: HomeAddress.city.value +define State: HomeAddress.state.value +define Zip: HomeAddress.postalCode.value + +define Telecom: Coalesce( Patient.telecom telecom where telecom.system.value = 'phone' ) +define Phone: Telecom.value.value diff --git a/src/cds-library/CRD-DTR/Shared/R4/files/BasicPractitionerInfoPrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/Shared/R4/files/BasicPractitionerInfoPrepopulation-0.1.0.cql new file mode 100644 index 00000000..0bff2c34 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/files/BasicPractitionerInfoPrepopulation-0.1.0.cql @@ -0,0 +1,57 @@ +library BasicPractitionerInfoPrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + +parameter device_request DeviceRequest +parameter service_request ServiceRequest +parameter medication_request MedicationRequest + +context Patient + +define function GetMiddleInitials(name FHIR.HumanName): + Substring(Combine((name.given given return Substring(given.value,0,1)),', '),3) + +define Today: Today() + +define "SigningProviderReference": Coalesce(device_request.performer.reference.value, service_request.performer.reference.value, medication_request.requester.reference.value) +// Get Practitioner +define OrderingProvider: singleton from ( + [Practitioner] practitioner + where ('Practitioner/' + practitioner.id) = SigningProviderReference) + +// Get Practitioner's Name +define Name: singleton from ( + ("OrderingProvider".name name where name.use.value = 'official') + union + "OrderingProvider".name) + +// Get Practitioner's Name elements +define LastName: "Name".family.value +define MiddleInitial: GetMiddleInitials("Name") +define FirstName: "Name".given[0].value +define FullName: + Coalesce("FirstName" + ' ' + "MiddleInitial" + ' ' + "LastName", "FirstName" + ' ' + "LastName") + +// Get Practitioner's NPI +define NPI: (singleton from ( + "OrderingProvider".identifier identifier + where identifier.system.value = 'http://hl7.org/fhir/sid/us-npi')).value.value + +define Address: singleton from ( + ("OrderingProvider".address address where address.use.value = 'postal' or address.use.value = 'work') + union + "OrderingProvider".address) + +define Line: "Address".line.value +define City: "Address".city.value +define State: "Address".state.value +define Zip: "Address".postalCode.value + +define Phone: (singleton from ( + "OrderingProvider".telecom telecom where telecom.system.value = 'phone')).value.value + +define Email: (singleton from ( + "OrderingProvider".telecom telecom where telecom.system.value = 'email')).value.value + +define Fax: (singleton from ( + "OrderingProvider".telecom telecom where telecom.system.value = 'fax')).value.value \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/files/CDS_Connect_Commons_for_FHIRv400-1.0.2.cql b/src/cds-library/CRD-DTR/Shared/R4/files/CDS_Connect_Commons_for_FHIRv400-1.0.2.cql new file mode 100644 index 00000000..8b176ad4 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/files/CDS_Connect_Commons_for_FHIRv400-1.0.2.cql @@ -0,0 +1,584 @@ +// CDS Connect Commons for FHIRv400 +// Change log: +// - 1.0.1 +// - Fix logic for ActiveOrRecurring to use equivalence matching (instead of "in" +// which uses equality matching) +// - Add back ...ByConcept functions for backwards compatibility w/ libraries that +// might expect them +// - Consider effectiveInstant in ObservationLookBack +// - 1.0.2 +// - Add functions for the Immunization resource +// - Add functions for the Device resource +library CDS_Connect_Commons_for_FHIRv400 version '1.0.2' + +using FHIR version '4.0.0' + +// Include the FHIRHelpers library for simplifying interacton w/ the FHIR data model +include FHIRHelpers version '4.0.0' called FHIRHelpers + +codesystem "AIVERSTATUS": 'http://terminology.hl7.org/CodeSystem/allergyintolerance-verification' +codesystem "AICLINSTATUS": 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' +codesystem "CONDVERSTATUS": 'http://terminology.hl7.org/CodeSystem/condition-ver-status' +codesystem "CONDCLINSTATUS": 'http://terminology.hl7.org/CodeSystem/condition-clinical' +code "AllergyIntolerance Confirmed code": 'confirmed' from "AIVERSTATUS" display 'Confirmed' +code "AllergyIntolerance Active code": 'active' from "AICLINSTATUS" display 'Active' +code "Condition Confirmed code": 'confirmed' from "CONDVERSTATUS" display 'Confirmed' +code "Condition Active code": 'active' from "CONDCLINSTATUS" display 'Active' +code "Condition Recurrence code": 'recurrence' from "CONDCLINSTATUS" display 'Recurrence' +code "Condition Relapse code": 'relapse' from "CONDCLINSTATUS" display 'Relapse' +concept "AllergyIntolerance Confirmed": { "AllergyIntolerance Confirmed code" } display 'Confirmed' +concept "AllergyIntolerance Active": { "AllergyIntolerance Active code" } display 'Active' +concept "Condition Confirmed": { "Condition Confirmed code" } display 'Confirmed' +concept "Condition Active": { "Condition Active code" } display 'Active' +concept "Condition Recurrence": { "Condition Recurrence code" } display 'Recurrence' +concept "Condition Relapse": { "Condition Relapse code" } display 'Relapse' + +// -------------------------------------------------- GENERAL --------------------------------------------------------- + +/** + * Converts a FHIR Period to a CQL Interval. FHIRHelpers provides a function for this, but + * FHIRHelpers provides several overloads of the ToInterval function, and the JavaScript CQL + * Execution Framework apparently does not handle this correctly. Creating uniquely named + * functions here ensures safe execution. + * @param period - a FHIR Period + * @returns {System.Interval} a CQL Interval or null if null was passed in + */ +define function PeriodToInterval(period FHIR.Period): + if period is null then + null + else + Interval[period."start".value, period."end".value] + +/** + * Converts a FHIR Range to a CQL Interval. FHIRHelpers provides a function for this, but + * FHIRHelpers provides several overloads of the ToInterval function, and the JavaScript CQL + * Execution Framework apparently does not handle this correctly. Creating uniquely named + * functions here ensures safe execution. + * @param range - a FHIR Range + * @returns {System.Interval} a CQL Interval or null if null was passed in + */ +define function RangeToInterval(range FHIR.Range): + if range is null then + null + else + Interval[FHIRHelpers.ToQuantity(range.low), FHIRHelpers.ToQuantity(range.high)] + +// -------------------------------------------------- OBSERVATIONS ----------------------------------------------------- + +/** + * Filters Observations by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Observations matching the concept, or null if null was passed in + */ +define function ObservationsByConcept(Koncept System.Concept): + [Observation] O where FHIRHelpers.ToConcept(O.code) ~ Koncept + +/** + * Observations that are complete and verified. In FHIR R4, there are three statuses that indicate this state: 'final', + * 'corrected', and 'amended'. + * @see http://hl7.org/fhir/R4/valueset-observation-status.html + * @param ObsList - a list of Observations + * @returns {List} a list of verified Observations, or null if null was passed in + */ +define function Verified(ObsList List): + ObsList O where O.status.value in {'final', 'corrected', 'amended'} + +/** + * Observations that have quantity values recorded in the requested unit. + * @param ObsList - a list of Observations + * @param Unit - the unit to require in the Observations quantity value + * @returns {List} a list of Observations with the required unit, or null if null was passed in + */ +define function WithUnit(ObsList List, Unit String): + ObsList O + where (O.value as FHIR.Quantity).unit.value = Unit or (O.value as FHIR.Quantity).code.value = Unit + +/** + * Observations with an effective or issued date in the specified "look back" period. For example, LDL-C Tests in the + * last 6 years. + * TODO: Rename to LookBack once the execution engine supports overloaded functions. + * @param ObsList - a list of Observations + * @returns {List} a list of Observations with effective or issued date specified lookback period, or null + * if null was passed in + */ +define function ObservationLookBack(ObsList List, LookBack System.Quantity): + ObsList O + let LookBackInterval: Interval[Now() - LookBack, Now()] + where (O.effective as FHIR.dateTime).value in LookBackInterval + or (O.effective as FHIR.instant).value in LookBackInterval + or PeriodToInterval(O.effective as FHIR.Period) overlaps LookBackInterval + or O.issued.value in LookBackInterval + +/** + * The most recent observation. For each Observation, this algorithm will use the Coalesce function, which uses the + * first non-null date value from these fields: effectiveDateTime, effectiveInstant, effectivePeriod.end, + * effectivePeriod.start, issued. The found date will be used to compare Observations and determine the most recent + * one. NOTE: We can't use FindDate because it appears that the execution engine may have problems sorting by the + * result of a function. + * @param ObsList - a list of Observations + * @returns {Observation} the most recent Observation from the list, or null if null was passed in + */ +define function MostRecent(ObsList List): + Last(ObsList O sort by Coalesce( + (effective as FHIR.dateTime).value, + (effective as FHIR.instant).value, + (effective as FHIR.Period)."end".value, + (effective as FHIR.Period)."start".value, + issued.value) + ) + +/** + * Extracts the quantity value from an Observation, returning it as a CQL Quantity + * @param Obs - an observation + * @returns {System.Quantity} the Observation's value as a quantity, or null if there is no quantity value + */ +define function QuantityValue(Obs Observation): + FHIRHelpers.ToQuantity(Obs.value as FHIR.Quantity) + +/** + * Extracts the CodeableConcept value from an Observation, returning it as a CQL Concept + * @param Obs - an observation + * @returns {System.Concept} the Observation's value as a concept, or null if there is no CodeabeConcept value + */ +define function ConceptValue(Obs Observation): + FHIRHelpers.ToConcept(Obs.value as FHIR.CodeableConcept) + +/** + * Finds the first non-null meaningful date that can be associated with this Observation. This will look through the + * following fields in the following order: effectiveDateTime, effectiveInstant, effectivePeriod.end, + * effectivePeriod.start, issued. + * @param Obs - an Observation + * @returns {System.DateTime} the first non-null meaningful date, or null if non is found + */ +define function FindDate(Obs Observation): + Coalesce( + (Obs.effective as FHIR.dateTime).value, + (Obs.effective as FHIR.instant).value, + (Obs.effective as FHIR.Period)."end".value, + (Obs.effective as FHIR.Period)."start".value, + Obs.issued.value + ) + +/** + * The highest observation. + * The value will be used to compare Observations and determine the highest one. + * @param ObsList - a list of Observations + * @returns {System.Quantity} the quantity with the highest value from the list, or null if null was passed in + */ +define function HighestObservation(ObsList List): + Max(ObsList O return FHIRHelpers.ToQuantity(O.value as FHIR.Quantity)) + + +// -------------------------------------------------- CONDITIONS ------------------------------------------------------- + +/** + * Filters Conditions by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Conditions matching the concept, or null if null was passed in + */ +define function ConditionsByConcept(Koncept System.Concept): + [Condition] C where FHIRHelpers.ToConcept(C.code) ~ Koncept + +/** + * Conditions that are confirmed. In FHIR R4, this is reflected by verificationStatus: 'confirmed'. + * @see http://hl7.org/fhir/R4/valueset-condition-ver-status.html + * @param CondList - a list of Conditions + * @returns {List} a list of confirmed Conditions, or null if null was passed in + */ +define function Confirmed(CondList List): + CondList C where C.verificationStatus ~ "Condition Confirmed" + +/** + * Conditions that are active. In FHIR R4, this is reflected by clinicalStatus: 'active' and the absence of any + * abatement information (i.e., if it abated, it is no longer active). + * TODO: Rename to Active once the execution engine supports overloaded functions. + * @see http://hl7.org/fhir/R4/valueset-condition-clinical.html + * @param CondList - a list of Conditions + * @returns {List} a list of active Conditions, or null if null was passed in + */ +define function ActiveCondition(CondList List): + CondList C + where C.clinicalStatus ~ "Condition Active" + and C.abatement is null + +/** + * Conditions that are active or recurring. In FHIR R4, this is reflected by clinicalStatus: 'active', 'recurrence', or + * 'relapse'. We do not check for null abatement information because it may have dates from when the now recurring + * condition initially went into remission. + * @see http://hl7.org/fhir/R4/valueset-condition-clinical.html + * @param CondList - a list of Conditions + * @returns {List} a list of active or recurring Conditions, or null if null was passed in + */ +define function ActiveOrRecurring(CondList List): + CondList C + where C.clinicalStatus ~ "Condition Active" + or C.clinicalStatus ~ "Condition Recurrence" + or C.clinicalStatus ~ "Condition Relapse" + +/** + * Conditions with an onset or recorded date in the specified "look back" period. For example, pregnancy in + * the last 42 weeks. + * TODO: Rename to LookBack once the execution engine supports overloaded functions. + * @param CondList - a list of Conditions + * @returns {List} a list of Conditions with onset or recorded date specified lookback period, or null + * if null was passed in + */ +define function ConditionLookBack(CondList List, LookBack System.Quantity): + CondList C + let LookBackInterval: Interval[Now() - LookBack, Now()] + where (C.onset as FHIR.dateTime).value in LookBackInterval + or PeriodToInterval(C.onset as FHIR.Period) overlaps LookBackInterval + or C.recordedDate.value in LookBackInterval + +/** + * The most recent condition. For each Condition, this algorithm will use the Coalesce function, which uses the + * first non-null result from these fields: onsetDateTime, onsetPeriod.end, onsetPeriod.start, assertedDate. + * The found date will be used to compare Conditions and determine the most recent one. + * @param CondList - a list of Conditions + * @returns {Condition} the most recent Condition from the list, or null if null was passed in + */ +define function MostRecentCondition(CondList List): + Last(CondList C sort by Coalesce( + (onset as FHIR.dateTime).value, + (onset as FHIR.Period)."end".value, + (onset as FHIR.Period)."start".value, + recordedDate.value) + ) + + // -------------------------------------------------- PROCEDURES ------------------------------------------------------ + + /** + * Filters Procedures by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Procedures matching the concept, or null if null was passed in + */ + define function ProceduresByConcept(Koncept System.Concept): + [Procedure] P where FHIRHelpers.ToConcept(P.code) ~ Koncept + +/** + * Procedures that are completed. In FHIR R4, this is reflected by status: 'completed'. + * @see http://hl7.org/fhir/R4/valueset-event-status.html + * @param ProcList - a list of Procedures + * @returns {List} a list of completed Procedures, or null if null was passed in + */ +define function Completed(ProcList List): + ProcList P + where P.status.value = 'completed' + +/** + * Procedures that are in progress. In FHIR R4, this is reflected by status: 'in-progress'. + * @see http://hl7.org/fhir/R4/valueset-event-status.html + * @param ProcList - a list of Procedures + * @returns {List} a list of completed Procedures, or null if null was passed in + */ +define function ProcedureInProgress(ProcList List): + ProcList P + where P.status.value = 'in-progress' + +/** + * Procedures that actually happened or are happening. In FHIR R4, there are a few properties that negate the + * procedure, most notably when status is 'preparation', 'not-done', 'entered-in-error', or 'unknown'. + * @see http://hl7.org/fhir/R4/valueset-event-status.html + * @param ProcList - a list of Procedures + * @returns {List} a list of Procedures that actually happened or are happening, or null if null was passed in + */ +define function ProcedurePerformance(ProcList List): + ProcList P + where not (P.status.value in {'preparation', 'not-done', 'entered-in-error', 'unknown'}) + +/** + * Procedures performed in the specified "look back" period. For example, PCIs performed in the + * past 2 weeks. + * TODO: Rename to LookBack once the execution engine supports overloaded functions. + * @param ProcList - a list of Procedures + * @param LookBack - the lookback period for when the procedure was performed + * @returns {List} a list of Procedures performed in the look back period, or null if null + * was passed in + */ +define function ProcedureLookBack(ProcList List, LookBack System.Quantity): + ProcList P + let LookBackInterval: Interval[Now() - LookBack, Now()] + where (P.performed as FHIR.dateTime).value in LookBackInterval + or PeriodToInterval(P.performed as FHIR.Period) overlaps LookBackInterval + +/** + * The most recent procedure. For each Procedure, this algorithm will use the Coalesce function, which returns the + * first non-null result from these fields: performedDateTime, performedPeriod.end, performedPeriod.start. + * The found date will be used to compare Procedures and determine the most recent one. + * @param ProcList - a list of Procedures + * @returns {Procedure} the most recent Procedure from the list, or null if null was passed in + */ +define function MostRecentProcedure(ProcList List): + Last(ProcList P sort by Coalesce( + (performed as FHIR.dateTime).value, + (performed as FHIR.Period)."end".value, + (performed as FHIR.Period)."start".value) + ) + +// ----------------------------------------------- SERVICEREQUESTS ----------------------------------------------------- + +// NOTE: In FHIR R4, ProcedureRequest and ReferralRequest are replaced by ServiceRequest + +/** + * ServiceRequests that are active or completed. In FHIR R4, this is reflected by the corresponding + * status values. + * @see http://hl7.org/fhir/R4/valueset-request-status.html + * @param ServiceRequestList - a list of ServiceRequests + * @returns {List} a list of accepted, in-progress, or completed ProcedureRequests, + * or null if null was passed in + */ +define function ServiceRequestActiveOrCompleted(ServiceRequestList List): + ServiceRequestList S + where S.status.value in List{'active', 'completed'} + +/** + * ServiceRequests ordered in the specified "look back" period. For example, PCIs ordered in the + * past 2 weeks. + * TODO: Rename to LookBack once the execution engine supports overloaded functions. + * @param ServiceRequestList - a list of ServiceRequests + * @param LookBack - the lookback period for when the service was ordered + * @returns {List} a list of ServiceRequests ordered in the look back period, or null if null + * was passed in + */ +define function ServiceRequestLookBack(ServiceRequestList List, LookBack System.Quantity): + ServiceRequestList S + where S.authoredOn.value in Interval[Now() - LookBack, Now()] + +// -------------------------------------------------- MEDICATIONS ------------------------------------------------------ + +/** + * Filters MedicationStatements by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of MedicationStatement matching the concept, or null if null was passed in + */ +define function MedicationStatementsByConcept(Koncept System.Concept): + [MedicationStatement] M where FHIRHelpers.ToConcept(M.medication as FHIR.CodeableConcept) ~ Koncept + +/** + * Filters MedicationRequests by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of MedicationRequests matching the concept, or null if null was passed in + */ +define function MedicationRequestsByConcept(Koncept System.Concept): + [MedicationRequest] M where FHIRHelpers.ToConcept(M.medication as FHIR.CodeableConcept) ~ Koncept + +/** + * Medications that are active, according to a statement, but not necessarily verified via a prescription. For example, + * medications that a patient has self-reported to be taking. This may, however, also represent medications that are + * expected to be active after providing a prescription (e.g., clinician-reported). In FHIR R4, this is reflected by + * MedicationStatement with status 'active' and no end date or an end date in the future. + * TODO: Rename to Active once the execution engine supports overloaded functions. + * @see http://hl7.org/fhir/R4/valueset-medication-statement-status.html + * @param MedList - a list of MedicationStatements + * @returns {List} a list of active medication statements, or null if null was passed in + */ +define function ActiveMedicationStatement(MedList List): + MedList M + let EffectivePeriod: PeriodToInterval(M.effective as FHIR.Period) + where M.status.value = 'active' + and (end of EffectivePeriod is null or end of EffectivePeriod after Now()) + +/** +* Medication requests that are active. In FHIR R4, this is reflected by MedicationRequest with status 'active'. +* Note that in R4, the MedicationRequest Boundaries and Relationships now says: "When reporting on the usage of +* a medication by a patient, the MedicationStatement resource should be used." It also indicates that: +* "A medication statement is not a part of the prescribe->dispense->administer sequence but is a report that +* such a sequence (or at least a part of it) did take place resulting in a belief that the patient has received +* a particular medication." In this regard, MedicationStatement is more appropriate as an indication of an actually +* active medication, although it's not clear if vendors really will automatically create MedicationStatements in +* these cases or not. Until we know, MedicationRequest may be the best proxy we have for an active medication. +* TODO: Should the "intent" field be considered (e.g., is it still active if intent is "proposal" or "plan")? +* TODO: Rename to Active once the execution engine supports overloaded functions. +* @see http://hl7.org/fhir/R4/valueset-medicationrequest-status.html +* @param MedList - a list of MedicationRequests +* @returns {List} a list of active medication requests, or null if null was passed in +*/ +define function ActiveMedicationRequest(MedList List): + MedList M where M.status.value = 'active' + +/** +* Medication requests that are active or completed, according to a prescription. In FHIR R4, this is reflected by MedicationRequest +* with status 'active' or 'completed'. See the note above (in ActiveMedicationRequest) for more nuance regarding MedicationRequest +* vs. MedicationStatement. +* @see http://hl7.org/fhir/R4/valueset-medicationrequest-status.html +* @param MedList - a list of MedicationRequests +* @returns {List} a list of active medication requests, or null if null was passed in +*/ +define function ActiveOrCompletedMedicationRequest(MedList List): + MedList M + where M.status.value = 'active' + or M.status.value = 'completed' + +/** + * Medications that are active or completed, according to a statement, but not necessarily verified via a prescription. + * For example, medications that a patient has self-reported to be taking. This may, however, also represent + * medications that are expected to be active after providing a prescription (e.g., clinician-reported). In FHIR R4, + * this is reflected by MedicationStatement with status 'active' or 'completed'. + * TODO: Rename to ActiveOrCompleted once the execution engine supports overloaded functions. + * @see http://hl7.org/fhir/R4/valueset-medication-statement-status.html + * @param MedList - a list of MedicationStatements + * @returns {List} a list of active or completed medication statements, or null if null was passed + * in + */ +define function ActiveOrCompletedMedicationStatement(MedList List): + MedList M + where M.status.value = 'active' + or M.status.value = 'completed' + +/** +* Medication requests that are active, completed, or stopped, according to a prescription. In FHIR R4, this is +* reflected by MedicationRequest with status 'active', 'completed', or 'stopped'. See the note above +* (in ActiveMedicationRequest) for more nuance regarding MedicationRequest vs. MedicationStatement. +* @see http://hl7.org/fhir/R4/valueset-medicationrequest-status.html +* @param MedList - a list of MedicationOrders +* @returns {List} a list of active medication requests, or null if null was passed in +*/ +define function ActiveCompletedOrStoppedMedicationRequest(MedList List): + MedList M + where M.status.value = 'active' + or M.status.value = 'completed' + or M.status.value = 'stopped' + +/** +* Medication requests that are issued in the specified "look back" period. +* TODO: Rename to LookBack once the execution engine supports overloaded functions. +* @param MedList - a list of Medications +* @param LookBack - the lookback period for when the medication was prescribed +* @returns {List} a list of Medications prescribed in the look back period, or null if null +* was passed in +*/ +define function MedicationRequestLookBack(MedList List, LookBack System.Quantity): + MedList M + let LookBackInterval: Interval[Now() - LookBack, Now()] + where M.authoredOn.value in LookBackInterval + // DSTU2 also checked the dateEnded property of MedicationOrder, but this doesn't exist for MedicationRequest +/** +* Medication Statements that are issued in the specified "look back" period. +* TODO: Rename to LookBack once the execution engine supports overloaded functions. +* @param MedList - a list of Medications +* @param LookBack - the lookback period for when the medication was prescribed +* @returns {List} a list of Medications prescribed in the look back period, or null if null +* was passed in +*/ +define function MedicationStatementLookBack(MedList List, LookBack System.Quantity): + MedList M + let LookBackInterval: Interval[Now() - LookBack, Now()] + where (M.effective as FHIR.dateTime).value in LookBackInterval + or PeriodToInterval(M.effective as FHIR.Period) overlaps LookBackInterval +// -------------------------------------------------- ENCOUNTERS ------------------------------------------------------ +/** + * Filters Encounters by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Encounters matching the concept, or null if null was passed in + */ +define function EncountersByConcept(Koncept System.Concept): + [Encounter] E where exists( (E.type) ET where FHIRHelpers.ToConcept(ET) ~ Koncept ) +/** + * Encounters that are in progress. In FHIR R4, this is reflected by status: 'in-progress'. + * @see http://hl7.org/fhir/R4/valueset-encounter-status.html + * @param EncList - a list of Encounters + * @returns {List} a list of in progress encounters, or null if null was passed in + */ +define function InProgress(EncList List): + EncList E + where E.status.value = 'in-progress' +// -------------------------------------------------- ALLERGY INTOLERANCES ------------------------------------------------------ +/** + * Filters AllergyIntolerances by a concept rather than by a ValueSet. In CQL 1.3, this is built into the retrieve, + * but for backwards compatibility, we keep this query where clause as an option. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Allergy Intolerances matching the concept, or null if null was passed in + */ +define function AllergyIntolerancesByConcept(Koncept System.Concept): + [AllergyIntolerance] A where FHIRHelpers.ToConcept(A.code) ~ Koncept +/** +* AllergyIntolerances that are active or confirmed. In FHIR STU3, this is reflected by AllergyIntolerance +* with clinicalStatus 'active' or verificationStatus 'confirmed' +* @see https://www.hl7.org/fhir/R4/valueset-allergy-clinical-status.html +* @see https://www.hl7.org/fhir/R4/valueset-allergy-verification-status.html +* @param AllergyIntolList - a list of AllergyIntolerances +* @returns {List} a list of active or confirmed allergy intolerances, or null if null was passed in +*/ +define function ActiveOrConfirmedAllergyIntolerance(AllergyIntolList List): + AllergyIntolList A + where A.clinicalStatus ~ "AllergyIntolerance Active" + or A.verificationStatus ~ "AllergyIntolerance Confirmed" +// -------------------------------------------------------- GOALS ------------------------------------------------------ +/** + * Goals with a start, target, or status date in the specified "look back" period. For example, Pain Management Goals + * in the last 2 years. + * TODO: Rename to LookBack once the execution engine supports overloaded functions. + * @param GoalList - a list of Goals + * @returns {List} a list of Goals with a start, target, or status date in the specified lookback period, or null + * if null was passed in + */ +define function GoalLookBack(GoalList List, LookBack System.Quantity): + GoalList G + let LookBackInterval: Interval[Now() - LookBack, Now()], + StartDate: (G.start as FHIR.date).value, + StatusDate: G.statusDate.value, + TargetDates: (G.target) T return (T.due as FHIR.date).value, + TargetQuantities: (G.target) T return FHIRHelpers.ToQuantity(T.due as FHIR.Duration) + where StartDate in LookBackInterval + or StatusDate in LookBackInterval + or exists(TargetDates TD where TD in LookBackInterval) + or exists(TargetQuantities TQ where (StartDate + TQ) in LookBackInterval) +// -------------------------------------------------- Immunizations ---------------------------------------------------- + /** + * Filters Immunizations by a concept rather than by a ValueSet. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Immunizations matching the concept, or null if null was passed in + */ + define function ImmunizationsByConcept(Koncept System.Concept): + [Immunization] I where FHIRHelpers.ToConcept(I.vaccineCode) ~ Koncept +/** + * Immunizations that are completed. In FHIR R4, this is reflected by status: 'completed'. + * @see http://hl7.org/fhir/R4/valueset-immunization-status.html + * @param ImmunizationList - a list of Immunizations + * @returns {List} a list of completed Immunizations, or null if null was passed in + */ +define function CompletedImmunization(ImmunizationList List): + ImmunizationList I + where I.status.value = 'completed' +/** + * Immunizations given in the specified "look back" period. + * TODO: Rename to LookBack once the execution engine supports overloaded functions. + * @param ImmunizationList - a list of Immunizations + * @param LookBack - the lookback period for when the immunization was given + * @returns {List} a list of Immunizations given in the look back period, or null if null + * was passed in + */ +define function ImmunizationLookBack(ImmunizationList List, LookBack System.Quantity): + ImmunizationList I + let LookBackInterval: Interval[Now() - LookBack, Now()] + where (I.occurrence as FHIR.dateTime).value in LookBackInterval +/** + * The most recent Immunization. + * @param ImmunizationList - a list of Immunizations + * @returns {Immunization} the most recent Immunization from the list, or null if null was passed in + */ +define function MostRecentImmunization(ImmunizationList List): + Last(ImmunizationList I sort by (occurrence as FHIR.dateTime).value) +// ----------------------------------------------------- Devices ------------------------------------------------------- + /** + * Filters Devices by a concept rather than by a ValueSet. + * @param Koncept - the concept to filter on (intentionally mispelled to avoid naming clashes) + * @returns {List} a list of Devices matching the concept, or null if null was passed in + */ + define function DevicesByConcept(Koncept System.Concept): + [Device] D where FHIRHelpers.ToConcept(D.type) ~ Koncept +/** + * Devices that are active. In FHIR R4, this is reflected by status: 'active'. + * @see http://hl7.org/fhir/R4/valueset-device-status.html + * @param DeviceList - a list of Devices + * @returns {List} a list of active Devices, or null if null was passed in + */ +define function ActiveDevice(DeviceList List): + DeviceList D + where D.status.value = 'active' \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/files/DTRHelpers-0.1.0.cql b/src/cds-library/CRD-DTR/Shared/R4/files/DTRHelpers-0.1.0.cql new file mode 100644 index 00000000..f9577ce5 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/files/DTRHelpers-0.1.0.cql @@ -0,0 +1,109 @@ +library DTRHelpers version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers +include CDS_Connect_Commons_for_FHIRv400 version '1.0.2' called CDS + +context Patient + +// -------------------------------------------------- CONDITIONS ----------------------------------------------------- + +// Returns formatted relvant diagnoses codes from a list of conditions +// Use Case: Retrieve DeviceRequest relevant diagnoses +define function CodesFromConditions(CondList List): + distinct(flatten( + CondList C + let DiagnosesCodings: + (C.code.coding) CODING where CODING.system.value in { + 'http://hl7.org/fhir/sid/icd-10', + 'http://hl7.org/fhir/sid/icd-10-cm', + 'http://snomed.info/sct' + } + return FHIRHelpers.ToCode(CODING) + return DiagnosesCodings + )) + +// Returns the first chronologically recorded condition of a ConditionList +// Use Case: Access earlierst condition from a list +define function FirstDateConditionRecorded(ConditionList List): + First(ConditionList C sort by FHIRHelpers."ToDateTime"(recordedDate)) + +// -------------------------------------------------- OBSERVATIONS ----------------------------------------------------- + +// Returns the Observation with the lowest value from an ObservationList +// Use Case: Finding the lowest numerical lab result +define function LowestObservation(ObsList List): + Min(ObsList O return FHIRHelpers.ToQuantity(O.value as Quantity)) + +// Returns the numerical value of an Observation, without a unit +// Use Case: Displaying only the numerical part of a lab result +define function GetObservationValue(Obs Observation): + NullSafeToQuantityWithoutUnit(cast Obs.value as Quantity) + +// Retrieve the numerical value of a FHIR quantity, without units +// Use Case: Helper function for GetObservationValue() +define function NullSafeToQuantityWithoutUnit(Qty FHIR.Quantity): + if Qty is not null then Qty.value.value + else null + +// -------------------------------------------------- ENCOUNTERS ----------------------------------------------------- + +// Takes in a list of encounters and a lookback period, and returns a subset of that list containing encounters occuring during that lookback period. +// Use Case: Retrieve encounters that occur during a recent time period +define function EncounterLookBack(EncounterList List, LookBack System.Quantity): + EncounterList E + let LookBackInterval: Interval[Now() - LookBack, Now()] + where (cast E.period.start as dateTime).value in LookBackInterval + or CDS.PeriodToInterval(cast E.period as Period) overlaps LookBackInterval + +// Returns formatted codings from a list of Encounters +// Use Case: Query relevant Encounters +define function ConvertEncounterDetails(EncounterList List): + distinct( + flatten( + EncounterList E + let EncounterCodings: + (E.type.coding) CODING + return Tuple { + code: CODING.code.value, + system: CODING.system.value, + display: CODING.display.value, + periodStart: E.period.start.value, + encounterReason: E.reasonCode[0].coding.display.value, + type: 'encounter' + } + return EncounterCodings + ) + ) + + // -------------------------------------------------- PROCEDURES ----------------------------------------------------- +// Returns formatted codings from a list of Procedures +// Use Case: Query relevant procedures for a MedicationRequest +define function ProcedureCoding(ProcedureList List): + distinct( + flatten( + ProcedureList P + let DiagnosesCodings: + (P.code.coding) CODING + return Tuple { + code: CODING.code.value, + system: CODING.system.value, + display: CODING.display.value + } + return DiagnosesCodings + ) + ) + +// Returns formatted codings from a list of Procedures +// Use Case: Query relevant procedures for a MedicationRequest + define function CodesFromProcedures(ProcedureList List): + distinct(flatten( + ProcedureList P + let DiagnosesCodings: + (P.code.coding) CODING where CODING.system.value in { + 'http://hl7.org/fhir/sid/icd-10', + 'http://hl7.org/fhir/sid/icd-10-cm', + 'http://snomed.info/sct' + } + return FHIRHelpers.ToCode(CODING) + return DiagnosesCodings + )) \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/files/FHIRHelpers-4.0.0.cql b/src/cds-library/CRD-DTR/Shared/R4/files/FHIRHelpers-4.0.0.cql new file mode 100644 index 00000000..fe086bec --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/files/FHIRHelpers-4.0.0.cql @@ -0,0 +1,270 @@ +library FHIRHelpers version '4.0.0' + +using FHIR version '4.0.0' + +define function ToInterval(period FHIR.Period): + if period is null then + null + else + Interval[period."start".value, period."end".value] + +define function ToQuantity(quantity FHIR.Quantity): + if quantity is null then + null + else + System.Quantity { value: quantity.value.value, unit: quantity.unit.value } + +define function ToInterval(range FHIR.Range): + if range is null then + null + else + Interval[ToQuantity(range.low), ToQuantity(range.high)] + +define function ToCode(coding FHIR.Coding): + if coding is null then + null + else + System.Code { + code: coding.code.value, + system: coding.system.value, + version: coding.version.value, + display: coding.display.value + } + +define function ToConcept(concept FHIR.CodeableConcept): + if concept is null then + null + else + System.Concept { + codes: concept.coding C return ToCode(C), + display: concept.text.value + } + +define function ToString(value FHIR.uuid): value.value +define function ToString(value FHIR.TestScriptRequestMethodCode): value.value +define function ToString(value FHIR.SortDirection): value.value +define function ToString(value FHIR.BiologicallyDerivedProductStatus): value.value +define function ToString(value FHIR.UnitsOfTime): value.value +define function ToString(value FHIR.AddressType): value.value +define function ToString(value FHIR.AllergyIntoleranceCategory): value.value +define function ToString(value FHIR.IssueSeverity): value.value +define function ToString(value FHIR.CareTeamStatus): value.value +define function ToString(value FHIR.EncounterStatus): value.value +define function ToString(value FHIR.StructureDefinitionKind): value.value +define function ToString(value FHIR.PublicationStatus): value.value +define function ToString(value FHIR.FHIRVersion): value.value +define function ToString(value FHIR.CarePlanActivityKind): value.value +define function ToString(value FHIR.StructureMapSourceListMode): value.value +define function ToString(value FHIR.RequestStatus): value.value +define function ToString(value FHIR.strandType): value.value +define function ToString(value FHIR.QuestionnaireResponseStatus): value.value +define function ToString(value FHIR.SearchComparator): value.value +define function ToString(value FHIR.ChargeItemStatus): value.value +define function ToString(value FHIR.ActionParticipantType): value.value +define function ToString(value FHIR.AllergyIntoleranceType): value.value +define function ToString(value FHIR.CarePlanActivityStatus): value.value +define function ToString(value FHIR.InvoiceStatus): value.value +define function ToString(value FHIR.ClaimProcessingCodes): value.value +define function ToString(value FHIR.RequestResourceType): value.value +define function ToString(value FHIR.ParticipationStatus): value.value +define function ToString(value FHIR.DeviceNameType): value.value +define function ToString(value FHIR.DocumentMode): value.value +define function ToString(value FHIR.AssertionOperatorType): value.value +define function ToString(value FHIR.DaysOfWeek): value.value +define function ToString(value FHIR.IssueType): value.value +define function ToString(value FHIR.canonical): value.value +define function ToString(value FHIR.StructureMapContextType): value.value +define function ToString(value FHIR.FamilyHistoryStatus): value.value +define function ToString(value FHIR.status): value.value +define function ToString(value FHIR.ExtensionContextType): value.value +define function ToString(value FHIR.AssertionResponseTypes): value.value +define function ToString(value FHIR.RequestIntent): value.value +define function ToString(value FHIR.string): value.value +define function ToString(value FHIR.ActionRequiredBehavior): value.value +define function ToString(value FHIR.GraphCompartmentUse): value.value +define function ToString(value FHIR.orientationType): value.value +define function ToString(value FHIR.AccountStatus): value.value +define function ToString(value FHIR.IdentifierUse): value.value +define function ToString(value FHIR.StructureMapTargetListMode): value.value +define function ToString(value FHIR.ExposureState): value.value +define function ToString(value FHIR.TestReportParticipantType): value.value +define function ToString(value FHIR.BindingStrength): value.value +define function ToString(value FHIR.RequestPriority): value.value +define function ToString(value FHIR.ParticipantRequired): value.value +define function ToString(value FHIR.XPathUsageType): value.value +define function ToString(value FHIR.id): value.value +define function ToString(value FHIR.FilterOperator): value.value +define function ToString(value FHIR.NamingSystemType): value.value +define function ToString(value FHIR.ContractResourceStatusCodes): value.value +define function ToString(value FHIR.ResearchSubjectStatus): value.value +define function ToString(value FHIR.StructureMapTransform): value.value +define function ToString(value FHIR.ResponseType): value.value +define function ToDecimal(value FHIR.decimal): value.value +define function ToString(value FHIR.AggregationMode): value.value +define function ToString(value FHIR.sequenceType): value.value +define function ToString(value FHIR.SystemRestfulInteraction): value.value +define function ToString(value FHIR.AdverseEventActuality): value.value +define function ToString(value FHIR.SubscriptionChannelType): value.value +define function ToString(value FHIR.AssertionDirectionType): value.value +define function ToString(value FHIR.CarePlanIntent): value.value +define function ToString(value FHIR.AllergyIntoleranceCriticality): value.value +define function ToString(value FHIR.PropertyRepresentation): value.value +define function ToString(value FHIR.TriggerType): value.value +define function ToString(value FHIR.CompositionStatus): value.value +define function ToString(value FHIR.AppointmentStatus): value.value +define function ToString(value FHIR.MessageSignificanceCategory): value.value +define function ToString(value FHIR.ListMode): value.value +define function ToString(value FHIR.ResearchElementType): value.value +define function ToString(value FHIR.ObservationStatus): value.value +define function ToString(value FHIR.ResourceType): value.value +define function ToBoolean(value FHIR.boolean): value.value +define function ToString(value FHIR.StructureMapGroupTypeMode): value.value +define function ToString(value FHIR.SupplyRequestStatus): value.value +define function ToString(value FHIR.EncounterLocationStatus): value.value +define function ToString(value FHIR.ConditionalDeleteStatus): value.value +define function ToString(value FHIR.url): value.value +define function ToString(value FHIR.uri): value.value +define function ToString(value FHIR.Use): value.value +define function ToString(value FHIR.MedicationRequestStatus): value.value +define function ToString(value FHIR.IdentityAssuranceLevel): value.value +define function ToString(value FHIR.DeviceMetricColor): value.value +define function ToTime(value FHIR.time): value.value +define function ToString(value FHIR.ConditionalReadStatus): value.value +define function ToString(value FHIR.AllergyIntoleranceSeverity): value.value +define function ToString(value FHIR.FinancialResourceStatusCodes): value.value +define function ToString(value FHIR.OperationKind): value.value +define function ToString(value FHIR.SubscriptionStatus): value.value +define function ToString(value FHIR.GoalLifecycleStatus): value.value +define function ToString(value FHIR.ObservationDataType): value.value +define function ToString(value FHIR.DocumentReferenceStatus): value.value +define function ToString(value FHIR.repositoryType): value.value +define function ToString(value FHIR.LocationStatus): value.value +define function ToString(value FHIR.NoteType): value.value +define function ToString(value FHIR.TestReportStatus): value.value +define function ToString(value FHIR.CodeSystemContentMode): value.value +define function ToString(value FHIR.FHIRDeviceStatus): value.value +define function ToString(value FHIR.ContactPointSystem): value.value +define function ToString(value FHIR.SlotStatus): value.value +define function ToString(value FHIR.PropertyType): value.value +define function ToString(value FHIR.TypeDerivationRule): value.value +define function ToString(value FHIR.GuidanceResponseStatus): value.value +define function ToString(value FHIR.RelatedArtifactType): value.value +define function ToString(value FHIR.oid): value.value +define function ToString(value FHIR.CompartmentType): value.value +define function ToString(value FHIR.MedicationRequestIntent): value.value +define function ToString(value FHIR.InvoicePriceComponentType): value.value +define function ToString(value FHIR.DeviceMetricCalibrationState): value.value +define function ToString(value FHIR.GroupType): value.value +define function ToString(value FHIR.EnableWhenBehavior): value.value +define function ToString(value FHIR.TaskIntent): value.value +define function ToString(value FHIR.ImmunizationEvaluationStatusCodes): value.value +define function ToString(value FHIR.ExampleScenarioActorType): value.value +define function ToString(value FHIR.ProvenanceEntityRole): value.value +define function ToString(value FHIR.SpecimenStatus): value.value +define function ToString(value FHIR.RestfulCapabilityMode): value.value +define function ToString(value FHIR.DetectedIssueSeverity): value.value +define function ToString(value FHIR.VisionEyes): value.value +define function ToString(value FHIR.ConsentDataMeaning): value.value +define function ToString(value FHIR.messageheaderResponseRequest): value.value +define function ToString(value FHIR.GuidePageGeneration): value.value +define function ToString(value FHIR.DocumentRelationshipType): value.value +define function ToString(value FHIR.VariableType): value.value +define function ToString(value FHIR.TestReportResult): value.value +define function ToString(value FHIR.ConceptMapGroupUnmappedMode): value.value +define function ToDateTime(value FHIR.instant): value.value +define function ToDateTime(value FHIR.dateTime): value.value +define function ToDate(value FHIR.date): value.value +define function ToInteger(value FHIR.positiveInt): value.value +define function ToString(value FHIR.ClinicalImpressionStatus): value.value +define function ToString(value FHIR.EligibilityResponsePurpose): value.value +define function ToString(value FHIR.NarrativeStatus): value.value +define function ToString(value FHIR.ImagingStudyStatus): value.value +define function ToString(value FHIR.EndpointStatus): value.value +define function ToString(value FHIR.BiologicallyDerivedProductCategory): value.value +define function ToString(value FHIR.ResourceVersionPolicy): value.value +define function ToString(value FHIR.ActionCardinalityBehavior): value.value +define function ToString(value FHIR.GroupMeasure): value.value +define function ToString(value FHIR.NamingSystemIdentifierType): value.value +define function ToString(value FHIR.ImmunizationStatusCodes): value.value +define function ToString(value FHIR.MedicationStatusCodes): value.value +define function ToString(value FHIR.DiscriminatorType): value.value +define function ToString(value FHIR.StructureMapInputMode): value.value +define function ToString(value FHIR.LinkageType): value.value +define function ToString(value FHIR.ReferenceHandlingPolicy): value.value +define function ToString(value FHIR.ResearchStudyStatus): value.value +define function ToString(value FHIR.AuditEventOutcome): value.value +define function ToString(value FHIR.SpecimenContainedPreference): value.value +define function ToString(value FHIR.ActionRelationshipType): value.value +define function ToString(value FHIR.ConstraintSeverity): value.value +define function ToString(value FHIR.EventCapabilityMode): value.value +define function ToString(value FHIR.CodeSearchSupport): value.value +define function ToString(value FHIR.ObservationRangeCategory): value.value +define function ToString(value FHIR.UDIEntryType): value.value +define function ToString(value FHIR.DeviceMetricCategory): value.value +define function ToString(value FHIR.TestReportActionResult): value.value +define function ToString(value FHIR.CapabilityStatementKind): value.value +define function ToString(value FHIR.EventTiming): value.value +define function ToString(value FHIR.SearchParamType): value.value +define function ToString(value FHIR.ActionGroupingBehavior): value.value +define function ToString(value FHIR.StructureMapModelMode): value.value +define function ToString(value FHIR.TaskStatus): value.value +define function ToString(value FHIR.BiologicallyDerivedProductStorageScale): value.value +define function ToString(value FHIR.GraphCompartmentRule): value.value +define function ToString(value FHIR.SlicingRules): value.value +define function ToString(value FHIR.ExplanationOfBenefitStatus): value.value +define function ToString(value FHIR.GuideParameterCode): value.value +define function ToString(value FHIR.CatalogEntryRelationType): value.value +define function ToString(value FHIR.LinkType): value.value +define function ToString(value FHIR.ConceptMapEquivalence): value.value +define function ToString(value FHIR.AuditEventAction): value.value +define function ToString(value FHIR.SearchModifierCode): value.value +define function ToString(value FHIR.EventStatus): value.value +define function ToString(value FHIR.OperationParameterUse): value.value +define function ToString(value FHIR.ConsentProvisionType): value.value +define function ToString(value FHIR.ActionConditionKind): value.value +define function ToString(value FHIR.qualityType): value.value +define function ToString(value FHIR.AdministrativeGender): value.value +define function ToString(value FHIR.QuestionnaireItemType): value.value +define function ToString(value FHIR.DeviceMetricCalibrationType): value.value +define function ToString(value FHIR.EvidenceVariableType): value.value +define function ToString(value FHIR.code): value.value +define function ToString(value FHIR.ActionSelectionBehavior): value.value +define function ToString(value FHIR.SupplyDeliveryStatus): value.value +define function ToString(value FHIR.DiagnosticReportStatus): value.value +define function ToString(value FHIR.FlagStatus): value.value +define function ToString(value FHIR.SPDXLicense): value.value +define function ToString(value FHIR.ListStatus): value.value +define function ToString(value FHIR.base64Binary): value.value +define function ToString(value FHIR.DeviceUseStatementStatus): value.value +define function ToString(value FHIR.AuditEventAgentNetworkType): value.value +define function ToString(value FHIR.ExpressionLanguage): value.value +define function ToString(value FHIR.AddressUse): value.value +define function ToString(value FHIR.ContactPointUse): value.value +define function ToString(value FHIR.DeviceMetricOperationalStatus): value.value +define function ToString(value FHIR.ContributorType): value.value +define function ToString(value FHIR.ReferenceVersionRules): value.value +define function ToString(value FHIR.MeasureReportStatus): value.value +define function ToString(value FHIR.SearchEntryMode): value.value +define function ToInteger(value FHIR.unsignedInt): value.value +define function ToString(value FHIR.NameUse): value.value +define function ToString(value FHIR.LocationMode): value.value +define function ToInteger(value FHIR.integer): value.value +define function ToString(value FHIR.FHIRSubstanceStatus): value.value +define function ToString(value FHIR.QuestionnaireItemOperator): value.value +define function ToString(value FHIR.HTTPVerb): value.value +define function ToString(value FHIR.EpisodeOfCareStatus): value.value +define function ToString(value FHIR.RemittanceOutcome): value.value +define function ToString(value FHIR.markdown): value.value +define function ToString(value FHIR.EligibilityRequestPurpose): value.value +define function ToString(value FHIR.QuantityComparator): value.value +define function ToString(value FHIR.MeasureReportType): value.value +define function ToString(value FHIR.ActionPrecheckBehavior): value.value +define function ToString(value FHIR.SampledDataDataType): value.value +define function ToString(value FHIR.CompositionAttestationMode): value.value +define function ToString(value FHIR.TypeRestfulInteraction): value.value +define function ToString(value FHIR.CodeSystemHierarchyMeaning): value.value +define function ToString(value FHIR.vConfidentialityClassification): value.value +define function ToString(value FHIR.ContractResourcePublicationStatusCodes): value.value +define function ToString(value FHIR.VisionBase): value.value +define function ToString(value FHIR.BundleType): value.value + diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json new file mode 100644 index 00000000..3b04eb6a --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json @@ -0,0 +1,40 @@ +{ + "resourceType": "Library", + "id": "BasicClinicalInfo-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicClinicalInfo-prepopulation", + "name": "BasicClinicalInfo-prepopulation", + "version": "0.1.0", + "title": "Basic Clinical Info FHIR R4", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + } + ], + "dataRequirement": [ + { "type": "Condition" }, + { "type": "Encounter" }, + { "type": "Practitioner" }, + { "type": "AllergyIntolerance" }, + { "type": "Procedure" }, + { "type": "MedicationStatement" } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBCYXNpY0NsaW5pY2FsSW5mb1ByZXBvcHVsYXRpb24gdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwoKY29kZXN5c3RlbSAiSEw3LVYyLTAxMzYiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMTM2JyAKCmNvZGUgIlllcyI6ICdZJyBmcm9tICJITDctVjItMDEzNiIgZGlzcGxheSAnWWVzJwpjb2RlICJObyI6ICdOJyBmcm9tICJITDctVjItMDEzNiIgZGlzcGxheSAnTm8nCgpwYXJhbWV0ZXIgZGV2aWNlX3JlcXVlc3QgRGV2aWNlUmVxdWVzdApwYXJhbWV0ZXIgc2VydmljZV9yZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0CnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJUb2RheSI6IFRvZGF5KCkKCmRlZmluZSAiT3JkZXJpbmdQcm92aWRlclJlZmVyZW5jZSI6IENvYWxlc2NlKGRldmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIHNlcnZpY2VfcmVxdWVzdC5wZXJmb3JtZXIucmVmZXJlbmNlLnZhbHVlLCBtZWRpY2F0aW9uX3JlcXVlc3QucGVyZm9ybWVyLnJlZmVyZW5jZS52YWx1ZSkKZGVmaW5lICJPcmRlcmluZ1Byb3ZpZGVyIjogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJdIHByYWN0aXRpb25lcgogICAgd2hlcmUgKCdQcmFjdGl0aW9uZXIvJyArIHByYWN0aXRpb25lci5pZCkgPSAiT3JkZXJpbmdQcm92aWRlclJlZmVyZW5jZSIpCgpkZWZpbmUgIlJlcXVlc3RFbmNvdW50ZXJSZWZlcmVuY2UiOiBDb2FsZXNjZShkZXZpY2VfcmVxdWVzdC5lbmNvdW50ZXIucmVmZXJlbmNlLnZhbHVlLCBzZXJ2aWNlX3JlcXVlc3QuZW5jb3VudGVyLnJlZmVyZW5jZS52YWx1ZSwgbWVkaWNhdGlvbl9yZXF1ZXN0LmVuY291bnRlci5yZWZlcmVuY2UudmFsdWUpCmRlZmluZSAiUmVxdWVzdEVuY291bnRlciI6IAogIFtFbmNvdW50ZXJdIEUKICB3aGVyZSAnRW5jb3VudGVyLycrIEUuaWQgPSAiUmVxdWVzdEVuY291bnRlclJlZmVyZW5jZSIKCmRlZmluZSAiUmVxdWVzdEVuY291bnRlckRhdGUiOgogIGlmIGV4aXN0cygiUmVxdWVzdEVuY291bnRlciIpIHRoZW4gIlJlcXVlc3RFbmNvdW50ZXIiLnBlcmlvZC5zdGFydC52YWx1ZQogIGVsc2UgbnVsbAoKZGVmaW5lICJSZXF1ZXN0RW5jb3VudGVyUGFydGljaXBhbnRzIjogIlJlcXVlc3RFbmNvdW50ZXIiLnBhcnRpY2lwYW50CmRlZmluZSAiUmVxdWVzdEVuY291bnRlckZpcnN0UGFydGljaXBhbnRSZWZlcmVuY2UiOiAKICBpZiBleGlzdHMoIlJlcXVlc3RFbmNvdW50ZXJQYXJ0aWNpcGFudHMiKQogICAgdGhlbiAiUmVxdWVzdEVuY291bnRlclBhcnRpY2lwYW50cyJbMF0uaW5kaXZpZHVhbC5yZWZlcmVuY2UudmFsdWUKICBlbHNlIG51bGwgIAoKZGVmaW5lICJJc0VuY291bnRlclByb3ZpZGVyU2FtZUFzT3JkZXJpbmdQcm92aWRlciI6ICJPcmRlcmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiA9ICJSZXF1ZXN0RW5jb3VudGVyRmlyc3RQYXJ0aWNpcGFudFJlZmVyZW5jZSIKCmRlZmluZSAiT3JkZXJpbmdQcm92aWRlck5hbWUiOiBzaW5nbGV0b24gZnJvbSAoCiAgKCJPcmRlcmluZ1Byb3ZpZGVyIi5uYW1lIG5hbWUgd2hlcmUgbmFtZS51c2UudmFsdWUgPSAnb2ZmaWNpYWwnKSAKICB1bmlvbiAKICAiT3JkZXJpbmdQcm92aWRlciIubmFtZSkKCi8vIEdldCBQcmFjdGl0aW9uZXIncyBOYW1lIGVsZW1lbnRzCmRlZmluZSAiT3JkZXJpbmdQcm92aWRlckxhc3ROYW1lIjogIk9yZGVyaW5nUHJvdmlkZXJOYW1lIi5mYW1pbHkudmFsdWUKZGVmaW5lICJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCI6IEdldE1pZGRsZUluaXRpYWxzKCJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIpCmRlZmluZSAiT3JkZXJpbmdQcm92aWRlckZpcnN0TmFtZSI6ICJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIuZ2l2ZW5bMF0udmFsdWUKZGVmaW5lICJPcmRlcmluZ1Byb3ZpZGVyRnVsbE5hbWUiOgogICJPcmRlcmluZ1Byb3ZpZGVyRmlyc3ROYW1lIiArICcgJyArICJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCIgKyAnICcgKyAiT3JkZXJpbmdQcm92aWRlckxhc3ROYW1lIgoKLy8gR2V0IFByYWN0aXRpb25lcidzIE5QSQpkZWZpbmUgIk9yZGVyaW5nUHJvdmlkZXJOUEkiOiAoc2luZ2xldG9uIGZyb20gKAogICJPcmRlcmluZ1Byb3ZpZGVyIi5pZGVudGlmaWVyIGlkZW50aWZpZXIKICAgIHdoZXJlIGlkZW50aWZpZXIuc3lzdGVtLnZhbHVlID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL3VzLW5waScpKS52YWx1ZS52YWx1ZQoKLy8gRW5jb3VudGVyIHByb3ZpZGVyJ3MgaW5mb3JtYXRpb24KZGVmaW5lICJFbmNvdW50ZXJQcm92aWRlckxhc3ROYW1lIjogCiAgaWYgIklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiB0aGVuICJPcmRlcmluZ1Byb3ZpZGVyTGFzdE5hbWUiCiAgZWxzZSBudWxsCgpkZWZpbmUgIkVuY291bnRlclByb3ZpZGVyTWlkZGxlSW5pdGlhbCI6IAogIGlmICJJc0VuY291bnRlclByb3ZpZGVyU2FtZUFzT3JkZXJpbmdQcm92aWRlciIgdGhlbiAiT3JkZXJpbmdQcm92aWRlck1pZGRsZUluaXRpYWwiCiAgZWxzZSBudWxsCgpkZWZpbmUgIkVuY291bnRlclByb3ZpZGVyRmlyc3ROYW1lIjogCiAgaWYgIklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiB0aGVuICJPcmRlcmluZ1Byb3ZpZGVyRmlyc3ROYW1lIgogIGVsc2UgbnVsbAoKZGVmaW5lICJFbmNvdW50ZXJQcm92aWRlckZ1bGxOYW1lIjogCiAgaWYgIklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiB0aGVuICJPcmRlcmluZ1Byb3ZpZGVyRnVsbE5hbWUiCiAgZWxzZSBudWxsCgpkZWZpbmUgIkVuY291bnRlclByb3ZpZGVyTlBJIjoKICBpZiAiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiIHRoZW4gIk9yZGVyaW5nUHJvdmlkZXJOUEkiCiAgZWxzZSBudWxsCgpkZWZpbmUgZnVuY3Rpb24gR2V0TWlkZGxlSW5pdGlhbHMobmFtZSBGSElSLkh1bWFuTmFtZSk6CiAgU3Vic3RyaW5nKENvbWJpbmUoKG5hbWUuZ2l2ZW4gZ2l2ZW4gcmV0dXJuIFN1YnN0cmluZyhnaXZlbi52YWx1ZSwwLDEpKSwnLCAnKSwzKQoKIAovKiBUaGlzIGlzIGEgd29yayBhcm91bmQgdG8gcHJlcG9wdWxhdGUgd2l0aCBZZXMgYW5zd2VyIGZvciBZZXMvTm8gcXVlc3Rpb24uCiAgIFRoZSBibG9ja2luZyBpc3N1ZSBpcyB0aGF0IHdoZW4gTEhDIGZvcm0gY29udHJvbCBtZXJnZSBRdWVzdGlvbm5haXJlICh0aGUgY29tcGlsZWQgc3RhdGljIGZvcm0pCiAgIGFuZCBRdWVzdGlvbm5haXJlUmVzcG9uc2UgKHRoZSBDUUwgZXhwcmVzc2lvbiByZXN1bHRzKSB0byBjcmVhdGUgYSBmb3JtIHJlcHJlc2VudGF0aW9uLCAKICAgdGhlIGluaXRpYWwgdmFsdWUgaW4gUXVlc3Rpb25uYWlyZSBhcmUgaW5nb3JlZC4gCiAgIFNvIHdlIGNhbm5vdCB1c2UgUXVlc3Rpb25uYWlyZSBpbml0aWFsIHRvIHNldHVwIHRoZSBkZWZhdWx0IHZhbHVlLiAKKi8KZGVmaW5lIEFuc3dlclllczogIlllcyIKZGVmaW5lIEFuc3dlck5vOiAiTm8iCgpkZWZpbmUgQWxsZXJnaWVzOgogIENvZGVzRnJvbUFsbGVyZ2llcyhDb25maXJtZWRBbGxlcmdpZXMoW0FsbGVyZ3lJbnRvbGVyYW5jZV0pKQoKZGVmaW5lIGZ1bmN0aW9uIENvZGVzRnJvbUFsbGVyZ2llcyhBbGxlcmd5TGlzdCBMaXN0PEFsbGVyZ3lJbnRvbGVyYW5jZT4pOgogIGRpc3RpbmN0KGZsYXR0ZW4oCiAgICBBbGxlcmd5TGlzdCBDCiAgICAgIGxldCBBbGxlcmd5Q29kaW5nczoKICAgICAgICAgIChDLmNvZGUuY29kaW5nKSBDT0RJTkcgd2hlcmUgQ09ESU5HLnN5c3RlbS52YWx1ZSBpbiB7CiAgICAgICAgICAgICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEZISVJIZWxwZXJzLlRvQ29kZShDT0RJTkcpCiAgICAgIHJldHVybiBBbGxlcmd5Q29kaW5ncwogICkpCgpkZWZpbmUgZnVuY3Rpb24gQ29uZmlybWVkQWxsZXJnaWVzKEFsbGVyZ3lMaXN0IExpc3Q8QWxsZXJneUludG9sZXJhbmNlPik6CiAgQWxsZXJneUxpc3QgQyB3aGVyZSBDLnZlcmlmaWNhdGlvblN0YXR1cy5jb2RpbmcuY29kZSA9ICdjb25maXJtZWQnCgpkZWZpbmUgIkFsbERpYWdub3NlcyI6IEFjdGl2ZUNvbmZpcm1lZERpYWdub3NlcyhbQ29uZGl0aW9uXSkKCmRlZmluZSBmdW5jdGlvbiBBY3RpdmVDb25maXJtZWREaWFnbm9zZXMoQ29uZExpc3QgTGlzdDxGSElSLkNvbmRpdGlvbj4pOgogIGRpc3RpbmN0KAogICAgZmxhdHRlbigKICAgICAgQ29uZExpc3QgQwogICAgICAgIGxldCBEaWFnbm9zZXNDb2RpbmdzOgogICAgICAgICAgKEMuY29kZS5jb2RpbmcpIENPRElORyB3aGVyZSBDT0RJTkcuc3lzdGVtLnZhbHVlIGluIHsKICAgICAgICAgICAgJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMCcsCiAgICAgICAgICAgICdodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20nLAogICAgICAgICAgICAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKQogICAgICAgIHdoZXJlIEMudmVyaWZpY2F0aW9uU3RhdHVzLmNvZGluZy5jb2RlID0gJ2NvbmZpcm1lZCcKICAgICAgICAgIGFuZCBDLmNsaW5pY2FsU3RhdHVzLmNvZGluZy5jb2RlIGluIHsnYWN0aXZlJywgJ3JlbGFwc2UnfQogICAgICAgICAgYW5kIGV4aXN0cyhEaWFnbm9zZXNDb2RpbmdzKQogICAgICAgIHJldHVybiBEaWFnbm9zZXNDb2RpbmdzCiAgICApCiAgKSAgCmRlZmluZSAiQWxsUHJvY2VkdXJlcyI6IFByb2NlZHVyZUNvZGluZyhbUHJvY2VkdXJlXSkKZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZUNvZGluZyhQcm9jZWR1cmVMaXN0IExpc3Q8RkhJUi5Qcm9jZWR1cmU+KToKICBkaXN0aW5jdCgKICAgIGZsYXR0ZW4oCiAgICAgIFByb2NlZHVyZUxpc3QgUAogICAgICAgIGxldCBQcm9jZWR1cmVDb2RpbmdzOgogICAgICAgICAgKFAuY29kZS5jb2RpbmcpIENPRElORyAKICAgICAgICAgIHJldHVybiBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKQogICAgICAgIHJldHVybiBQcm9jZWR1cmVDb2RpbmdzCiAgICApCiAgKQoKICBkZWZpbmUgIlRydWUiOiB0cnVlCgogZGVmaW5lICJNZWRpY2F0aW9uVHVwbGVMaXN0IjogR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QoW01lZGljYXRpb25TdGF0ZW1lbnRdKQogZGVmaW5lIGZ1bmN0aW9uIEdldE1lZGljYXRpb25zVHVwbGVMaXN0KE1lZFN0YXRlbWVudExpc3QgTGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pik6CiAgICBkaXN0aW5jdCgKICAgICAgZmxhdHRlbigKICAgICAgICBNZWRTdGF0ZW1lbnRMaXN0IE1lZFN0YXRlbWVudAogICAgICAgICAgbGV0IE1lZGljYXRpb25MaXN0OgogICAgICAgICAgICAoTWVkU3RhdGVtZW50Lm1lZGljYXRpb24uY29kaW5nKSBDT0RJTkcKICAgICAgICAgICAgcmV0dXJuIFR1cGxlIHsKICAgICAgICAgICAgICBSeE5vcm06IEZISVJIZWxwZXJzLlRvQ29kZShDT0RJTkcpLmRpc3BsYXkgKyAnLScgKyBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5jb2RlICwKICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogRkhJUkhlbHBlcnMuVG9Db2RlKENPRElORykuZGlzcGxheQogICAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gTWVkaWNhdGlvbkxpc3QgIAogICAgICApCiAgICApICAgCgoK" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTgsInN0YXJ0Q2hhciI6MTI0LCJlbmRMaW5lIjoxOCwiZW5kQ2hhciI6MTI4LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkJhc2ljQ2xpbmljYWxJbmZvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjE4LCJzdGFydENoYXIiOjEyNCwiZW5kTGluZSI6MTgsImVuZENoYXIiOjEyOCwibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJCYXNpY0NsaW5pY2FsSW5mb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjoxMDYsInN0YXJ0Q2hhciI6NTEsImVuZExpbmUiOjEwNiwiZW5kQ2hhciI6NTQsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTIxLCJzdGFydENoYXIiOjQzLCJlbmRMaW5lIjoxMjEsImVuZENoYXIiOjQ2LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkJhc2ljQ2xpbmljYWxJbmZvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjEyMiwic3RhcnRDaGFyIjozOSwiZW5kTGluZSI6MTIyLCJlbmRDaGFyIjo0MiwibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn1dLCJpZGVudGlmaWVyIjp7ImlkIjoiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJwYXJhbWV0ZXJzIjp7ImRlZiI6W3sibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlcnZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJjb2RlU3lzdGVtcyI6eyJkZWYiOlt7Im5hbWUiOiJITDctVjItMDEzNiIsImlkIjoiaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMTM2IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifV19LCJjb2RlcyI6eyJkZWYiOlt7Im5hbWUiOiJZZXMiLCJpZCI6IlkiLCJkaXNwbGF5IjoiWWVzIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJITDctVjItMDEzNiJ9fSx7Im5hbWUiOiJObyIsImlkIjoiTiIsImRpc3BsYXkiOiJObyIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiSEw3LVYyLTAxMzYifX1dfSwiY29udGV4dHMiOnsiZGVmIjpbeyJuYW1lIjoiUGF0aWVudCJ9XX0sInN0YXRlbWVudHMiOnsiZGVmIjpbeyJuYW1lIjoiUGF0aWVudCIsImNvbnRleHQiOiJQYXRpZW50IiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwidHlwZSI6IlJldHJpZXZlIn19fSx7Im5hbWUiOiJUb2RheSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJUb2RheSJ9fSx7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJSZXF1ZXN0RW5jb3VudGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuY291bnRlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZW5jb3VudGVyIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZW5jb3VudGVyIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX1dfX0seyJuYW1lIjoiUmVxdWVzdEVuY291bnRlciIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJFIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJFbmNvdW50ZXIvIiwidHlwZSI6IkxpdGVyYWwifSx7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiaWQiLCJzY29wZSI6IkUiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiUmVxdWVzdEVuY291bnRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19LHsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXJEYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7Im5hbWUiOiJSZXF1ZXN0RW5jb3VudGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX0sInRoZW4iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJwZXJpb2QiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InBlcmlvZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InN0YXJ0IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sImVsc2UiOnsidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX19LHsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXJQYXJ0aWNpcGFudHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUmVxdWVzdEVuY291bnRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InBhcnRpY2lwYW50IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJwYXJ0aWNpcGFudCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX19LHsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXJGaXJzdFBhcnRpY2lwYW50UmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7Im5hbWUiOiJSZXF1ZXN0RW5jb3VudGVyUGFydGljaXBhbnRzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX0sInRoZW4iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImluZGl2aWR1YWwiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiUmVxdWVzdEVuY291bnRlclBhcnRpY2lwYW50cyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX0sImVsc2UiOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJuYW1lIjoiUmVxdWVzdEVuY291bnRlckZpcnN0UGFydGljaXBhbnRSZWZlcmVuY2UiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJOYW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJuYW1lIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidXNlIiwic2NvcGUiOiJuYW1lIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Im9mZmljaWFsIiwidHlwZSI6IkxpdGVyYWwifV19fSx7InBhdGgiOiJuYW1lIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX1dfX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJMYXN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZmFtaWx5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiR2V0TWlkZGxlSW5pdGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU3Vic3RyaW5nIiwic3RyaW5nVG9TdWIiOnsidHlwZSI6IkNvbWJpbmUiLCJzb3VyY2UiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImdpdmVuIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Im5hbWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU3Vic3RyaW5nIiwic3RyaW5nVG9TdWIiOnsicGF0aCI6InZhbHVlIiwic2NvcGUiOiJnaXZlbiIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJzdGFydEluZGV4Ijp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn0sImxlbmd0aCI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9fX19LCJzZXBhcmF0b3IiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiwgIiwidHlwZSI6IkxpdGVyYWwifX0sInN0YXJ0SW5kZXgiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIzIiwidHlwZSI6IkxpdGVyYWwifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJuYW1lIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUh1bWFuTmFtZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJHZXRNaWRkbGVJbml0aWFscyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX0seyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlckZpcnN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJnaXZlbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlck5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn1dfX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJGdWxsTmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyRmlyc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgIiwidHlwZSI6IkxpdGVyYWwifV19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJNaWRkbGVJbml0aWFsIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlckxhc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTlBJIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImlkZW50aWZpZXIiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvdXMtbnBpIiwidHlwZSI6IkxpdGVyYWwifV19fX19fX0seyJuYW1lIjoiRW5jb3VudGVyUHJvdmlkZXJMYXN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJ0aGVuIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTGFzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fX19LHsibmFtZSI6IkVuY291bnRlclByb3ZpZGVyTWlkZGxlSW5pdGlhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJ0aGVuIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0sImVsc2UiOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiRW5jb3VudGVyUHJvdmlkZXJGaXJzdE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiSWYiLCJjb25kaXRpb24iOnsibmFtZSI6IklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSwidGhlbiI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlckZpcnN0TmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0sImVsc2UiOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiRW5jb3VudGVyUHJvdmlkZXJGdWxsTmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJ0aGVuIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyRnVsbE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fX19LHsibmFtZSI6IkVuY291bnRlclByb3ZpZGVyTlBJIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7Im5hbWUiOiJJc0VuY291bnRlclByb3ZpZGVyU2FtZUFzT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0sInRoZW4iOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJOUEkiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fX19LHsibmFtZSI6IkFuc3dlclllcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJZZXMiLCJ0eXBlIjoiQ29kZVJlZiJ9fSx7Im5hbWUiOiJBbnN3ZXJObyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJObyIsInR5cGUiOiJDb2RlUmVmIn19LHsibmFtZSI6IkNvbmZpcm1lZEFsbGVyZ2llcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiQWxsZXJneUxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2ZXJpZmljYXRpb25TdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiY29uZmlybWVkIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IkFsbGVyZ3lMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQ29kZXNGcm9tQWxsZXJnaWVzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJBbGxlcmd5TGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiQWxsZXJneUNvZGluZ3MiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDT0RJTkciLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvQ29kZSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiQ09ESU5HIiwidHlwZSI6IkFsaWFzUmVmIn1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJBbGxlcmd5Q29kaW5ncyIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fX19fSwib3BlcmFuZCI6W3sibmFtZSI6IkFsbGVyZ3lMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWxsZXJnaWVzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvZGVzRnJvbUFsbGVyZ2llcyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25maXJtZWRBbGxlcmdpZXMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJSZXRyaWV2ZSJ9XX1dfX0seyJuYW1lIjoiQWN0aXZlQ29uZmlybWVkRGlhZ25vc2VzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJDb25kTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiRGlhZ25vc2VzQ29kaW5ncyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkNPRElORyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN5c3RlbSIsInNjb3BlIjoiQ09ESU5HIiwidHlwZSI6IlByb3BlcnR5In19LHsidHlwZSI6Ikxpc3QiLCJlbGVtZW50IjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvQ29kZSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiQ09ESU5HIiwidHlwZSI6IkFsaWFzUmVmIn1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQW5kIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sibmFtZSI6IlRvU3RyaW5nIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InZlcmlmaWNhdGlvblN0YXR1cyIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dfSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb25maXJtZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY2xpbmljYWxTdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19XX0seyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InJlbGFwc2UiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfV19LHsidHlwZSI6IkV4aXN0cyIsIm9wZXJhbmQiOnsibmFtZSI6IkRpYWdub3Nlc0NvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX1dfSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IkRpYWdub3Nlc0NvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFsbERpYWdub3NlcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJBY3RpdmVDb25maXJtZWREaWFnbm9zZXMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInR5cGUiOiJSZXRyaWV2ZSJ9XX19LHsibmFtZSI6IlByb2NlZHVyZUNvZGluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJEaXN0aW5jdCIsIm9wZXJhbmQiOnsidHlwZSI6IkZsYXR0ZW4iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJQIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUHJvY2VkdXJlTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiUHJvY2VkdXJlQ29kaW5ncyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkNPRElORyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlByb2NlZHVyZUNvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJQcm9jZWR1cmVMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWxsUHJvY2VkdXJlcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jZWR1cmVDb2RpbmciLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJSZXRyaWV2ZSJ9XX19LHsibmFtZSI6IlRydWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLCJ2YWx1ZSI6InRydWUiLCJ0eXBlIjoiTGl0ZXJhbCJ9fSx7Im5hbWUiOiJHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJEaXN0aW5jdCIsIm9wZXJhbmQiOnsidHlwZSI6IkZsYXR0ZW4iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJNZWRTdGF0ZW1lbnQiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRTdGF0ZW1lbnRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJNZWRpY2F0aW9uTGlzdCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkNPRElORyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoibWVkaWNhdGlvbiIsInNjb3BlIjoiTWVkU3RhdGVtZW50IiwidHlwZSI6IlByb3BlcnR5In19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7InR5cGUiOiJUdXBsZSIsImVsZW1lbnQiOlt7Im5hbWUiOiJSeE5vcm0iLCJ2YWx1ZSI6eyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJwYXRoIjoiZGlzcGxheSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiItIiwidHlwZSI6IkxpdGVyYWwifV19LHsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29kZSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiQ09ESU5HIiwidHlwZSI6IkFsaWFzUmVmIn1dfX1dfX0seyJuYW1lIjoiRGVzY3JpcHRpb24iLCJ2YWx1ZSI6eyJwYXRoIjoiZGlzcGxheSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fX1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRpY2F0aW9uTGlzdCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fX19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik1lZFN0YXRlbWVudExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiTWVkaWNhdGlvblR1cGxlTGlzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdCIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9XX19XX19fQ==" + } +] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json new file mode 100644 index 00000000..0a7eaf1c --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json @@ -0,0 +1,35 @@ +{ + "resourceType": "Library", + "id": "BasicPatientInfo-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPatientInfo-prepopulation", + "name": "BasicPatientInfo-prepopulation", + "version": "0.2.0", + "title": "Basic Patient Info FHIR R4", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + } + ], + "dataRequirement": [ + { "type": "Coverage" } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBCYXNpY1BhdGllbnRJbmZvUHJlcG9wdWxhdGlvbiB2ZXJzaW9uICcwLjIuMCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMCcKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgpwYXJhbWV0ZXIgZGV2aWNlX3JlcXVlc3QgRGV2aWNlUmVxdWVzdApwYXJhbWV0ZXIgc2VydmljZV9yZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0CnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lIGZ1bmN0aW9uIEdldE1pZGRsZUluaXRpYWxzKG5hbWUgRkhJUi5IdW1hbk5hbWUpOgogIFN1YnN0cmluZyhDb21iaW5lKChuYW1lLmdpdmVuIGdpdmVuIHJldHVybiBTdWJzdHJpbmcoZ2l2ZW4udmFsdWUsMCwxKSksJywgJyksMykKCmRlZmluZSBUb2RheTogVG9kYXkoKQoKLy8gR3JhYiBwYXRpZW50IEZISVIgSHVtYW5OYW1lCmRlZmluZSBOYW1lOiBzaW5nbGV0b24gZnJvbSAoUGF0aWVudC5uYW1lIG5hbWUgd2hlcmUgbmFtZS51c2UudmFsdWUgPSAnb2ZmaWNpYWwnKQoKLy8gRXh0cmFjdCB1c2VmdWwgbmFtZSBlbGVtZW50cwpkZWZpbmUgTGFzdE5hbWU6ICJOYW1lIi5mYW1pbHkudmFsdWUKZGVmaW5lIE1pZGRsZUluaXRpYWw6IEdldE1pZGRsZUluaXRpYWxzKCJOYW1lIikKZGVmaW5lIEZpcnN0TmFtZTogIk5hbWUiLmdpdmVuWzBdLnZhbHVlCgpkZWZpbmUgRnVsbE5hbWU6CiAgQ29hbGVzY2UoIkZpcnN0TmFtZSIgKyAnICcgKyAiTWlkZGxlSW5pdGlhbCIgKyAnICcgKyAiTGFzdE5hbWUiLCAiRmlyc3ROYW1lIiArICcgJyArICJMYXN0TmFtZSIpCgpkZWZpbmUgR2VuZGVyOiBQYXRpZW50LmdlbmRlci52YWx1ZQpkZWZpbmUgRGF0ZU9mQmlydGg6IFBhdGllbnQuYmlydGhEYXRlLnZhbHVlCgpkZWZpbmUgIlJlcXVlc3RDb3ZlcmFnZSI6IENvYWxlc2NlKGRldmljZV9yZXF1ZXN0Lmluc3VyYW5jZSwgc2VydmljZV9yZXF1ZXN0Lmluc3VyYW5jZSwgbWVkaWNhdGlvbl9yZXF1ZXN0Lmluc3VyYW5jZSkKCmRlZmluZSBDb3ZlcmFnZVJlc291cmNlOiBzaW5nbGV0b24gZnJvbSAoCiAgW0NvdmVyYWdlXSBjb3ZlcmFnZQogICAgLy8gcHVsbCBjb3ZlcmFnZSByZXNvdXJjZSBpZCBmcm9tIHRoZSBkZXZpY2UgcmVxdWVzdCBpbnN1cmFuY2UgZXh0ZW5zaW9uCiAgICB3aGVyZSAoJ0NvdmVyYWdlLycgKyBjb3ZlcmFnZS5pZCkgPSBSZXF1ZXN0Q292ZXJhZ2VbMF0ucmVmZXJlbmNlLnZhbHVlKQoKZGVmaW5lIE1lZGljYXJlSWQ6ICJDb3ZlcmFnZVJlc291cmNlIi5zdWJzY3JpYmVySWQudmFsdWUKCi8vIEdldCBQYXRpZW50IGhvbWUgYWRkcmVzcwpkZWZpbmUgSG9tZUFkZHJlc3M6IHNpbmdsZXRvbiBmcm9tIChQYXRpZW50LmFkZHJlc3MgYWRkcmVzcyB3aGVyZSBhZGRyZXNzLnVzZS52YWx1ZSA9ICdob21lJykKZGVmaW5lIExpbmU6IEhvbWVBZGRyZXNzLmxpbmVbMF0udmFsdWUKZGVmaW5lIENpdHk6IEhvbWVBZGRyZXNzLmNpdHkudmFsdWUKZGVmaW5lIFN0YXRlOiBIb21lQWRkcmVzcy5zdGF0ZS52YWx1ZQpkZWZpbmUgWmlwOiBIb21lQWRkcmVzcy5wb3N0YWxDb2RlLnZhbHVlCgpkZWZpbmUgVGVsZWNvbTogQ29hbGVzY2UoIFBhdGllbnQudGVsZWNvbSB0ZWxlY29tIHdoZXJlIHRlbGVjb20uc3lzdGVtLnZhbHVlID0gJ3Bob25lJyApCmRlZmluZSBQaG9uZTogVGVsZWNvbS52YWx1ZS52YWx1ZQo=" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkJhc2ljUGF0aWVudEluZm9QcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMi4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJwYXJhbWV0ZXJzIjp7ImRlZiI6W3sibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlcnZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IkdldE1pZGRsZUluaXRpYWxzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InR5cGUiOiJDb21iaW5lIiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJnaXZlbiIsImV4cHJlc3Npb24iOnsicGF0aCI6ImdpdmVuIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJuYW1lIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InBhdGgiOiJ2YWx1ZSIsInNjb3BlIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkifSwic3RhcnRJbmRleCI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9LCJsZW5ndGgiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIxIiwidHlwZSI6IkxpdGVyYWwifX19fSwic2VwYXJhdG9yIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIsICIsInR5cGUiOiJMaXRlcmFsIn19LCJzdGFydEluZGV4Ijp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMyIsInR5cGUiOiJMaXRlcmFsIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoibmFtZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiTmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoibmFtZSIsImV4cHJlc3Npb24iOnsicGF0aCI6Im5hbWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlBhdGllbnQiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InVzZSIsInNjb3BlIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJvZmZpY2lhbCIsInR5cGUiOiJMaXRlcmFsIn1dfX19fSx7Im5hbWUiOiJMYXN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZmFtaWx5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJOYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19fSx7Im5hbWUiOiJNaWRkbGVJbml0aWFsIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkdldE1pZGRsZUluaXRpYWxzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6Ik5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX19LHsibmFtZSI6IkZpcnN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJnaXZlbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJuYW1lIjoiRnVsbE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29hbGVzY2UiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJuYW1lIjoiRmlyc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgIiwidHlwZSI6IkxpdGVyYWwifV19LHsibmFtZSI6Ik1pZGRsZUluaXRpYWwiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiICIsInR5cGUiOiJMaXRlcmFsIn1dfSx7Im5hbWUiOiJMYXN0TmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfSx7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7Im5hbWUiOiJGaXJzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiTGFzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX1dfX0seyJuYW1lIjoiR2VuZGVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJnZW5kZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlBhdGllbnQiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LHsibmFtZSI6IkRhdGVPZkJpcnRoIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJiaXJ0aERhdGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlBhdGllbnQiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LHsibmFtZSI6IlJlcXVlc3RDb3ZlcmFnZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InBhdGgiOiJpbnN1cmFuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fSx7InBhdGgiOiJpbnN1cmFuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX0seyJwYXRoIjoiaW5zdXJhbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19XX19LHsibmFtZSI6IkNvdmVyYWdlUmVzb3VyY2UiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImNvdmVyYWdlIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvdmVyYWdlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IkNvdmVyYWdlLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJjb3ZlcmFnZSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX1dfSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sibmFtZSI6IlJlcXVlc3RDb3ZlcmFnZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fV19fX19LHsibmFtZSI6Ik1lZGljYXJlSWQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN1YnNjcmliZXJJZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiQ292ZXJhZ2VSZXNvdXJjZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiSG9tZUFkZHJlc3MiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImFkZHJlc3MiLCJleHByZXNzaW9uIjp7InBhdGgiOiJhZGRyZXNzIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJQYXRpZW50IiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6ImFkZHJlc3MiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaG9tZSIsInR5cGUiOiJMaXRlcmFsIn1dfX19fSx7Im5hbWUiOiJMaW5lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6ImxpbmUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IkhvbWVBZGRyZXNzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fSx7Im5hbWUiOiJDaXR5IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjaXR5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJIb21lQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiU3RhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXRlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJIb21lQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiWmlwIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJwb3N0YWxDb2RlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJIb21lQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiVGVsZWNvbSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJ0ZWxlY29tIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidGVsZWNvbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUGF0aWVudCIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InBob25lIiwidHlwZSI6IkxpdGVyYWwifV19fV19fSx7Im5hbWUiOiJQaG9uZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRlbGVjb20iLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19XX19fQ==" + } +] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json new file mode 100644 index 00000000..98cb980d --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json @@ -0,0 +1,35 @@ +{ + "resourceType": "Library", + "id": "BasicPractitionerInfo-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPractitionerInfo-prepopulation", + "name": "BasicPractitionerInfo-prepopulation", + "version": "0.1.0", + "title": "Basic Practitioner Info", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + } + ], + "dataRequirement": [ + { "type": "Practitioner" } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBCYXNpY1ByYWN0aXRpb25lckluZm9QcmVwb3B1bGF0aW9uIHZlcnNpb24gJzAuMS4wJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4wJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4wJyBjYWxsZWQgRkhJUkhlbHBlcnMKCnBhcmFtZXRlciBkZXZpY2VfcmVxdWVzdCBEZXZpY2VSZXF1ZXN0CnBhcmFtZXRlciBzZXJ2aWNlX3JlcXVlc3QgU2VydmljZVJlcXVlc3QKcGFyYW1ldGVyIG1lZGljYXRpb25fcmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdAoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgZnVuY3Rpb24gR2V0TWlkZGxlSW5pdGlhbHMobmFtZSBGSElSLkh1bWFuTmFtZSk6CiAgU3Vic3RyaW5nKENvbWJpbmUoKG5hbWUuZ2l2ZW4gZ2l2ZW4gcmV0dXJuIFN1YnN0cmluZyhnaXZlbi52YWx1ZSwwLDEpKSwnLCAnKSwzKQoKZGVmaW5lIFRvZGF5OiBUb2RheSgpCgpkZWZpbmUgIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSI6IENvYWxlc2NlKGRldmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIHNlcnZpY2VfcmVxdWVzdC5wZXJmb3JtZXIucmVmZXJlbmNlLnZhbHVlLCBtZWRpY2F0aW9uX3JlcXVlc3QucmVxdWVzdGVyLnJlZmVyZW5jZS52YWx1ZSkKLy8gR2V0IFByYWN0aXRpb25lcgpkZWZpbmUgT3JkZXJpbmdQcm92aWRlcjogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJdIHByYWN0aXRpb25lcgogICAgd2hlcmUgKCdQcmFjdGl0aW9uZXIvJyArIHByYWN0aXRpb25lci5pZCkgPSAgU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKLy8gR2V0IFByYWN0aXRpb25lcidzIE5hbWUKZGVmaW5lIE5hbWU6IHNpbmdsZXRvbiBmcm9tICgKICAoIk9yZGVyaW5nUHJvdmlkZXIiLm5hbWUgbmFtZSB3aGVyZSBuYW1lLnVzZS52YWx1ZSA9ICdvZmZpY2lhbCcpIAogIHVuaW9uIAogICJPcmRlcmluZ1Byb3ZpZGVyIi5uYW1lKQoKLy8gR2V0IFByYWN0aXRpb25lcidzIE5hbWUgZWxlbWVudHMKZGVmaW5lIExhc3ROYW1lOiAiTmFtZSIuZmFtaWx5LnZhbHVlCmRlZmluZSBNaWRkbGVJbml0aWFsOiBHZXRNaWRkbGVJbml0aWFscygiTmFtZSIpCmRlZmluZSBGaXJzdE5hbWU6ICJOYW1lIi5naXZlblswXS52YWx1ZQpkZWZpbmUgRnVsbE5hbWU6CiAgQ29hbGVzY2UoIkZpcnN0TmFtZSIgKyAnICcgKyAiTWlkZGxlSW5pdGlhbCIgKyAnICcgKyAiTGFzdE5hbWUiLCAiRmlyc3ROYW1lIiArICcgJyArICJMYXN0TmFtZSIpCgovLyBHZXQgUHJhY3RpdGlvbmVyJ3MgTlBJCmRlZmluZSBOUEk6IChzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLmlkZW50aWZpZXIgaWRlbnRpZmllcgogICAgd2hlcmUgaWRlbnRpZmllci5zeXN0ZW0udmFsdWUgPSAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvdXMtbnBpJykpLnZhbHVlLnZhbHVlCgpkZWZpbmUgQWRkcmVzczogc2luZ2xldG9uIGZyb20gKAogICgiT3JkZXJpbmdQcm92aWRlciIuYWRkcmVzcyBhZGRyZXNzIHdoZXJlIGFkZHJlc3MudXNlLnZhbHVlID0gJ3Bvc3RhbCcgb3IgYWRkcmVzcy51c2UudmFsdWUgPSAnd29yaycpCiAgdW5pb24KICAiT3JkZXJpbmdQcm92aWRlciIuYWRkcmVzcykKCmRlZmluZSBMaW5lOiAiQWRkcmVzcyIubGluZS52YWx1ZQpkZWZpbmUgQ2l0eTogIkFkZHJlc3MiLmNpdHkudmFsdWUKZGVmaW5lIFN0YXRlOiAiQWRkcmVzcyIuc3RhdGUudmFsdWUKZGVmaW5lIFppcDogIkFkZHJlc3MiLnBvc3RhbENvZGUudmFsdWUKCmRlZmluZSBQaG9uZTogKHNpbmdsZXRvbiBmcm9tICgKICAiT3JkZXJpbmdQcm92aWRlciIudGVsZWNvbSB0ZWxlY29tIHdoZXJlIHRlbGVjb20uc3lzdGVtLnZhbHVlID0gJ3Bob25lJykpLnZhbHVlLnZhbHVlCgpkZWZpbmUgRW1haWw6IChzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLnRlbGVjb20gdGVsZWNvbSB3aGVyZSB0ZWxlY29tLnN5c3RlbS52YWx1ZSA9ICdlbWFpbCcpKS52YWx1ZS52YWx1ZQoKZGVmaW5lIEZheDogKHNpbmdsZXRvbiBmcm9tICgKICAiT3JkZXJpbmdQcm92aWRlciIudGVsZWNvbSB0ZWxlY29tIHdoZXJlIHRlbGVjb20uc3lzdGVtLnZhbHVlID0gJ2ZheCcpKS52YWx1ZS52YWx1ZQ==" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiQmFzaWNQcmFjdGl0aW9uZXJJbmZvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjE2LCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MTYsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJCYXNpY1ByYWN0aXRpb25lckluZm9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTYsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoxNiwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifV0sImlkZW50aWZpZXIiOnsiaWQiOiJCYXNpY1ByYWN0aXRpb25lckluZm9QcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJwYXJhbWV0ZXJzIjp7ImRlZiI6W3sibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlcnZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IkdldE1pZGRsZUluaXRpYWxzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InR5cGUiOiJDb21iaW5lIiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJnaXZlbiIsImV4cHJlc3Npb24iOnsicGF0aCI6ImdpdmVuIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJuYW1lIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InBhdGgiOiJ2YWx1ZSIsInNjb3BlIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkifSwic3RhcnRJbmRleCI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9LCJsZW5ndGgiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIxIiwidHlwZSI6IkxpdGVyYWwifX19fSwic2VwYXJhdG9yIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIsICIsInR5cGUiOiJMaXRlcmFsIn19LCJzdGFydEluZGV4Ijp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMyIsInR5cGUiOiJMaXRlcmFsIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoibmFtZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6Ik5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlVuaW9uIiwib3BlcmFuZCI6W3sidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im5hbWUiLCJleHByZXNzaW9uIjp7InBhdGgiOiJuYW1lIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6Im5hbWUiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoib2ZmaWNpYWwiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19LHsicGF0aCI6Im5hbWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fV19fX0seyJuYW1lIjoiTGFzdE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImZhbWlseSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiTWlkZGxlSW5pdGlhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJHZXRNaWRkbGVJbml0aWFscyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJOYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJGaXJzdE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn1dfX19LHsibmFtZSI6IkZ1bGxOYW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sibmFtZSI6IkZpcnN0TmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiICIsInR5cGUiOiJMaXRlcmFsIn1dfSx7Im5hbWUiOiJNaWRkbGVJbml0aWFsIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiTGFzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX0seyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJuYW1lIjoiRmlyc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgIiwidHlwZSI6IkxpdGVyYWwifV19LHsibmFtZSI6Ikxhc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19XX19LHsibmFtZSI6Ik5QSSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJpZGVudGlmaWVyIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL3VzLW5waSIsInR5cGUiOiJMaXRlcmFsIn1dfX19fX19LHsibmFtZSI6IkFkZHJlc3MiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlVuaW9uIiwib3BlcmFuZCI6W3sidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImFkZHJlc3MiLCJleHByZXNzaW9uIjp7InBhdGgiOiJhZGRyZXNzIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6ImFkZHJlc3MiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoicG9zdGFsIiwidHlwZSI6IkxpdGVyYWwifV19LHsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6ImFkZHJlc3MiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoid29yayIsInR5cGUiOiJMaXRlcmFsIn1dfV19fSx7InBhdGgiOiJhZGRyZXNzIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX1dfX19LHsibmFtZSI6IkxpbmUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJsaW5lIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJBZGRyZXNzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX0seyJuYW1lIjoiQ2l0eSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY2l0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiU3RhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXRlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJBZGRyZXNzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19fSx7Im5hbWUiOiJaaXAiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBvc3RhbENvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IkFkZHJlc3MiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LHsibmFtZSI6IlBob25lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InRlbGVjb20iLCJleHByZXNzaW9uIjp7InBhdGgiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoicGhvbmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJFbWFpbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJ0ZWxlY29tIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidGVsZWNvbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImVtYWlsIiwidHlwZSI6IkxpdGVyYWwifV19fX19fX0seyJuYW1lIjoiRmF4IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InRlbGVjb20iLCJleHByZXNzaW9uIjp7InBhdGgiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiZmF4IiwidHlwZSI6IkxpdGVyYWwifV19fX19fX1dfX19" + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json new file mode 100644 index 00000000..a5274b56 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json @@ -0,0 +1,32 @@ +{ + "resourceType": "Library", + "id": "CDS_Connect_Commons_for_FHIRv400", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/CDS_Connect_Commons_for_FHIRv400", + "name": "CDS_Connect_Commons_for_FHIRv400", + "version": "1.0.2", + "title": "CDS Connect Commons", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "Ly8gQ0RTIENvbm5lY3QgQ29tbW9ucyBmb3IgRkhJUnY0MDAKLy8gQ2hhbmdlIGxvZzoKLy8gLSAxLjAuMQovLyAgIC0gRml4IGxvZ2ljIGZvciBBY3RpdmVPclJlY3VycmluZyB0byB1c2UgZXF1aXZhbGVuY2UgbWF0Y2hpbmcgKGluc3RlYWQgb2YgImluIgovLyAgICAgd2hpY2ggdXNlcyBlcXVhbGl0eSBtYXRjaGluZykKLy8gICAtIEFkZCBiYWNrIC4uLkJ5Q29uY2VwdCBmdW5jdGlvbnMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHcvIGxpYnJhcmllcyB0aGF0Ci8vICAgICBtaWdodCBleHBlY3QgdGhlbQovLyAgIC0gQ29uc2lkZXIgZWZmZWN0aXZlSW5zdGFudCBpbiBPYnNlcnZhdGlvbkxvb2tCYWNrCi8vIC0gMS4wLjIKLy8gICAtIEFkZCBmdW5jdGlvbnMgZm9yIHRoZSBJbW11bml6YXRpb24gcmVzb3VyY2UKLy8gICAtIEFkZCBmdW5jdGlvbnMgZm9yIHRoZSBEZXZpY2UgcmVzb3VyY2UKbGlicmFyeSBDRFNfQ29ubmVjdF9Db21tb25zX2Zvcl9GSElSdjQwMCB2ZXJzaW9uICcxLjAuMicKCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCgovLyBJbmNsdWRlIHRoZSBGSElSSGVscGVycyBsaWJyYXJ5IGZvciBzaW1wbGlmeWluZyBpbnRlcmFjdG9uIHcvIHRoZSBGSElSIGRhdGEgbW9kZWwKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgpjb2Rlc3lzdGVtICJBSVZFUlNUQVRVUyI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2FsbGVyZ3lpbnRvbGVyYW5jZS12ZXJpZmljYXRpb24nCmNvZGVzeXN0ZW0gIkFJQ0xJTlNUQVRVUyI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2FsbGVyZ3lpbnRvbGVyYW5jZS1jbGluaWNhbCcKY29kZXN5c3RlbSAiQ09ORFZFUlNUQVRVUyI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi12ZXItc3RhdHVzJwpjb2Rlc3lzdGVtICJDT05EQ0xJTlNUQVRVUyI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi1jbGluaWNhbCcKY29kZSAiQWxsZXJneUludG9sZXJhbmNlIENvbmZpcm1lZCBjb2RlIjogJ2NvbmZpcm1lZCcgZnJvbSAiQUlWRVJTVEFUVVMiIGRpc3BsYXkgJ0NvbmZpcm1lZCcKY29kZSAiQWxsZXJneUludG9sZXJhbmNlIEFjdGl2ZSBjb2RlIjogJ2FjdGl2ZScgZnJvbSAiQUlDTElOU1RBVFVTIiBkaXNwbGF5ICdBY3RpdmUnCmNvZGUgIkNvbmRpdGlvbiBDb25maXJtZWQgY29kZSI6ICdjb25maXJtZWQnIGZyb20gIkNPTkRWRVJTVEFUVVMiIGRpc3BsYXkgJ0NvbmZpcm1lZCcKY29kZSAiQ29uZGl0aW9uIEFjdGl2ZSBjb2RlIjogJ2FjdGl2ZScgZnJvbSAiQ09ORENMSU5TVEFUVVMiIGRpc3BsYXkgJ0FjdGl2ZScKY29kZSAiQ29uZGl0aW9uIFJlY3VycmVuY2UgY29kZSI6ICdyZWN1cnJlbmNlJyBmcm9tICJDT05EQ0xJTlNUQVRVUyIgZGlzcGxheSAnUmVjdXJyZW5jZScKY29kZSAiQ29uZGl0aW9uIFJlbGFwc2UgY29kZSI6ICdyZWxhcHNlJyBmcm9tICJDT05EQ0xJTlNUQVRVUyIgZGlzcGxheSAnUmVsYXBzZScKY29uY2VwdCAiQWxsZXJneUludG9sZXJhbmNlIENvbmZpcm1lZCI6IHsgIkFsbGVyZ3lJbnRvbGVyYW5jZSBDb25maXJtZWQgY29kZSIgfSBkaXNwbGF5ICdDb25maXJtZWQnCmNvbmNlcHQgIkFsbGVyZ3lJbnRvbGVyYW5jZSBBY3RpdmUiOiB7ICJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIGNvZGUiIH0gZGlzcGxheSAnQWN0aXZlJwpjb25jZXB0ICJDb25kaXRpb24gQ29uZmlybWVkIjogeyAiQ29uZGl0aW9uIENvbmZpcm1lZCBjb2RlIiB9IGRpc3BsYXkgJ0NvbmZpcm1lZCcKY29uY2VwdCAiQ29uZGl0aW9uIEFjdGl2ZSI6IHsgIkNvbmRpdGlvbiBBY3RpdmUgY29kZSIgfSBkaXNwbGF5ICdBY3RpdmUnCmNvbmNlcHQgIkNvbmRpdGlvbiBSZWN1cnJlbmNlIjogeyAiQ29uZGl0aW9uIFJlY3VycmVuY2UgY29kZSIgfSBkaXNwbGF5ICdSZWN1cnJlbmNlJwpjb25jZXB0ICJDb25kaXRpb24gUmVsYXBzZSI6IHsgIkNvbmRpdGlvbiBSZWxhcHNlIGNvZGUiIH0gZGlzcGxheSAnUmVsYXBzZScKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdFTkVSQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovKioKICogQ29udmVydHMgYSBGSElSIFBlcmlvZCB0byBhIENRTCBJbnRlcnZhbC4gIEZISVJIZWxwZXJzIHByb3ZpZGVzIGEgZnVuY3Rpb24gZm9yIHRoaXMsIGJ1dAogKiBGSElSSGVscGVycyBwcm92aWRlcyBzZXZlcmFsIG92ZXJsb2FkcyBvZiB0aGUgVG9JbnRlcnZhbCBmdW5jdGlvbiwgYW5kIHRoZSBKYXZhU2NyaXB0IENRTAogKiBFeGVjdXRpb24gRnJhbWV3b3JrIGFwcGFyZW50bHkgZG9lcyBub3QgaGFuZGxlIHRoaXMgY29ycmVjdGx5LiAgQ3JlYXRpbmcgdW5pcXVlbHkgbmFtZWQKICogZnVuY3Rpb25zIGhlcmUgZW5zdXJlcyBzYWZlIGV4ZWN1dGlvbi4KICogQHBhcmFtIHBlcmlvZCAtIGEgRkhJUiBQZXJpb2QKICogQHJldHVybnMge1N5c3RlbS5JbnRlcnZhbH0gYSBDUUwgSW50ZXJ2YWwgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBQZXJpb2RUb0ludGVydmFsKHBlcmlvZCBGSElSLlBlcmlvZCk6CiAgaWYgcGVyaW9kIGlzIG51bGwgdGhlbgogICAgbnVsbAogIGVsc2UKICAgIEludGVydmFsW3BlcmlvZC4ic3RhcnQiLnZhbHVlLCBwZXJpb2QuImVuZCIudmFsdWVdCgovKioKICogQ29udmVydHMgYSBGSElSIFJhbmdlIHRvIGEgQ1FMIEludGVydmFsLiAgRkhJUkhlbHBlcnMgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgdGhpcywgYnV0CiAqIEZISVJIZWxwZXJzIHByb3ZpZGVzIHNldmVyYWwgb3ZlcmxvYWRzIG9mIHRoZSBUb0ludGVydmFsIGZ1bmN0aW9uLCBhbmQgdGhlIEphdmFTY3JpcHQgQ1FMCiAqIEV4ZWN1dGlvbiBGcmFtZXdvcmsgYXBwYXJlbnRseSBkb2VzIG5vdCBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuICBDcmVhdGluZyB1bmlxdWVseSBuYW1lZAogKiBmdW5jdGlvbnMgaGVyZSBlbnN1cmVzIHNhZmUgZXhlY3V0aW9uLgogKiBAcGFyYW0gcmFuZ2UgLSBhIEZISVIgUmFuZ2UKICogQHJldHVybnMge1N5c3RlbS5JbnRlcnZhbH0gYSBDUUwgSW50ZXJ2YWwgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBSYW5nZVRvSW50ZXJ2YWwocmFuZ2UgRkhJUi5SYW5nZSk6CiAgaWYgcmFuZ2UgaXMgbnVsbCB0aGVuCiAgICBudWxsCiAgZWxzZQogICAgSW50ZXJ2YWxbRkhJUkhlbHBlcnMuVG9RdWFudGl0eShyYW5nZS5sb3cpLCBGSElSSGVscGVycy5Ub1F1YW50aXR5KHJhbmdlLmhpZ2gpXQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT0JTRVJWQVRJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovKioKICogRmlsdGVycyBPYnNlcnZhdGlvbnMgYnkgYSBjb25jZXB0IHJhdGhlciB0aGFuIGJ5IGEgVmFsdWVTZXQuICBJbiBDUUwgMS4zLCB0aGlzIGlzIGJ1aWx0IGludG8gdGhlIHJldHJpZXZlLAogKiBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBrZWVwIHRoaXMgcXVlcnkgd2hlcmUgY2xhdXNlIGFzIGFuIG9wdGlvbi4KICogQHBhcmFtIEtvbmNlcHQgLSB0aGUgY29uY2VwdCB0byBmaWx0ZXIgb24gKGludGVudGlvbmFsbHkgbWlzcGVsbGVkIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzKQogKiBAcmV0dXJucyB7TGlzdDxPYnNlcnZhdGlvbj59IGEgbGlzdCBvZiBPYnNlcnZhdGlvbnMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25zQnlDb25jZXB0KEtvbmNlcHQgU3lzdGVtLkNvbmNlcHQpOgogIFtPYnNlcnZhdGlvbl0gTyB3aGVyZSBGSElSSGVscGVycy5Ub0NvbmNlcHQoTy5jb2RlKSB+IEtvbmNlcHQKCi8qKgogKiBPYnNlcnZhdGlvbnMgdGhhdCBhcmUgY29tcGxldGUgYW5kIHZlcmlmaWVkLiBJbiBGSElSIFI0LCB0aGVyZSBhcmUgdGhyZWUgc3RhdHVzZXMgdGhhdCBpbmRpY2F0ZSB0aGlzIHN0YXRlOiAnZmluYWwnLAogKiAnY29ycmVjdGVkJywgYW5kICdhbWVuZGVkJy4KICogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LW9ic2VydmF0aW9uLXN0YXR1cy5odG1sCiAqIEBwYXJhbSBPYnNMaXN0IC0gYSBsaXN0IG9mIE9ic2VydmF0aW9ucwogKiBAcmV0dXJucyB7TGlzdDxPYnNlcnZhdGlvbj59IGEgbGlzdCBvZiB2ZXJpZmllZCBPYnNlcnZhdGlvbnMsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gVmVyaWZpZWQoT2JzTGlzdCBMaXN0PE9ic2VydmF0aW9uPik6CiAgT2JzTGlzdCBPIHdoZXJlIE8uc3RhdHVzLnZhbHVlIGluIHsnZmluYWwnLCAnY29ycmVjdGVkJywgJ2FtZW5kZWQnfQoKLyoqCiAqIE9ic2VydmF0aW9ucyB0aGF0IGhhdmUgcXVhbnRpdHkgdmFsdWVzIHJlY29yZGVkIGluIHRoZSByZXF1ZXN0ZWQgdW5pdC4KICogQHBhcmFtIE9ic0xpc3QgLSBhIGxpc3Qgb2YgT2JzZXJ2YXRpb25zCiAqIEBwYXJhbSBVbml0IC0gdGhlIHVuaXQgdG8gcmVxdWlyZSBpbiB0aGUgT2JzZXJ2YXRpb25zIHF1YW50aXR5IHZhbHVlCiAqIEByZXR1cm5zIHtMaXN0PE9ic2VydmF0aW9uPn0gYSBsaXN0IG9mIE9ic2VydmF0aW9ucyB3aXRoIHRoZSByZXF1aXJlZCB1bml0LCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIFdpdGhVbml0KE9ic0xpc3QgTGlzdDxPYnNlcnZhdGlvbj4sIFVuaXQgU3RyaW5nKToKICBPYnNMaXN0IE8KICAgIHdoZXJlIChPLnZhbHVlIGFzIEZISVIuUXVhbnRpdHkpLnVuaXQudmFsdWUgPSBVbml0IG9yIChPLnZhbHVlIGFzIEZISVIuUXVhbnRpdHkpLmNvZGUudmFsdWUgPSBVbml0CgovKioKICogT2JzZXJ2YXRpb25zIHdpdGggYW4gZWZmZWN0aXZlIG9yIGlzc3VlZCBkYXRlIGluIHRoZSBzcGVjaWZpZWQgImxvb2sgYmFjayIgcGVyaW9kLiAgRm9yIGV4YW1wbGUsIExETC1DIFRlc3RzIGluIHRoZQogKiBsYXN0IDYgeWVhcnMuCiAqIFRPRE86IFJlbmFtZSB0byBMb29rQmFjayBvbmNlIHRoZSBleGVjdXRpb24gZW5naW5lIHN1cHBvcnRzIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgogKiBAcGFyYW0gT2JzTGlzdCAtIGEgbGlzdCBvZiBPYnNlcnZhdGlvbnMKICogQHJldHVybnMge0xpc3Q8T2JzZXJ2YXRpb24+fSBhIGxpc3Qgb2YgT2JzZXJ2YXRpb25zIHdpdGggZWZmZWN0aXZlIG9yIGlzc3VlZCBkYXRlIHNwZWNpZmllZCBsb29rYmFjayBwZXJpb2QsIG9yIG51bGwKICogaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25Mb29rQmFjayhPYnNMaXN0IExpc3Q8T2JzZXJ2YXRpb24+LCBMb29rQmFjayBTeXN0ZW0uUXVhbnRpdHkpOgogIE9ic0xpc3QgTwogICAgbGV0IExvb2tCYWNrSW50ZXJ2YWw6IEludGVydmFsW05vdygpIC0gTG9va0JhY2ssIE5vdygpXQogICAgd2hlcmUgKE8uZWZmZWN0aXZlIGFzIEZISVIuZGF0ZVRpbWUpLnZhbHVlIGluIExvb2tCYWNrSW50ZXJ2YWwKICAgICAgb3IgKE8uZWZmZWN0aXZlIGFzIEZISVIuaW5zdGFudCkudmFsdWUgaW4gTG9va0JhY2tJbnRlcnZhbAogICAgICBvciBQZXJpb2RUb0ludGVydmFsKE8uZWZmZWN0aXZlIGFzIEZISVIuUGVyaW9kKSBvdmVybGFwcyBMb29rQmFja0ludGVydmFsCiAgICAgIG9yIE8uaXNzdWVkLnZhbHVlIGluIExvb2tCYWNrSW50ZXJ2YWwKCi8qKgogKiBUaGUgbW9zdCByZWNlbnQgb2JzZXJ2YXRpb24uICBGb3IgZWFjaCBPYnNlcnZhdGlvbiwgdGhpcyBhbGdvcml0aG0gd2lsbCB1c2UgdGhlIENvYWxlc2NlIGZ1bmN0aW9uLCB3aGljaCB1c2VzIHRoZQogKiBmaXJzdCBub24tbnVsbCBkYXRlIHZhbHVlIGZyb20gdGhlc2UgZmllbGRzOiBlZmZlY3RpdmVEYXRlVGltZSwgZWZmZWN0aXZlSW5zdGFudCwgZWZmZWN0aXZlUGVyaW9kLmVuZCwKICogZWZmZWN0aXZlUGVyaW9kLnN0YXJ0LCBpc3N1ZWQuIFRoZSBmb3VuZCBkYXRlIHdpbGwgYmUgdXNlZCB0byBjb21wYXJlIE9ic2VydmF0aW9ucyBhbmQgZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudAogKiBvbmUuICBOT1RFOiBXZSBjYW4ndCB1c2UgRmluZERhdGUgYmVjYXVzZSBpdCBhcHBlYXJzIHRoYXQgdGhlIGV4ZWN1dGlvbiBlbmdpbmUgbWF5IGhhdmUgcHJvYmxlbXMgc29ydGluZyBieSB0aGUKICogcmVzdWx0IG9mIGEgZnVuY3Rpb24uCiAqIEBwYXJhbSBPYnNMaXN0IC0gYSBsaXN0IG9mIE9ic2VydmF0aW9ucwogKiBAcmV0dXJucyB7T2JzZXJ2YXRpb259IHRoZSBtb3N0IHJlY2VudCBPYnNlcnZhdGlvbiBmcm9tIHRoZSBsaXN0LCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIE1vc3RSZWNlbnQoT2JzTGlzdCBMaXN0PE9ic2VydmF0aW9uPik6CiAgTGFzdChPYnNMaXN0IE8gc29ydCBieSBDb2FsZXNjZSgKICAgIChlZmZlY3RpdmUgYXMgRkhJUi5kYXRlVGltZSkudmFsdWUsCiAgICAoZWZmZWN0aXZlIGFzIEZISVIuaW5zdGFudCkudmFsdWUsCiAgICAoZWZmZWN0aXZlIGFzIEZISVIuUGVyaW9kKS4iZW5kIi52YWx1ZSwKICAgIChlZmZlY3RpdmUgYXMgRkhJUi5QZXJpb2QpLiJzdGFydCIudmFsdWUsCiAgICBpc3N1ZWQudmFsdWUpCiAgKQoKLyoqCiAqIEV4dHJhY3RzIHRoZSBxdWFudGl0eSB2YWx1ZSBmcm9tIGFuIE9ic2VydmF0aW9uLCByZXR1cm5pbmcgaXQgYXMgYSBDUUwgUXVhbnRpdHkKICogQHBhcmFtIE9icyAtIGFuIG9ic2VydmF0aW9uCiAqIEByZXR1cm5zIHtTeXN0ZW0uUXVhbnRpdHl9IHRoZSBPYnNlcnZhdGlvbidzIHZhbHVlIGFzIGEgcXVhbnRpdHksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gcXVhbnRpdHkgdmFsdWUKICovCmRlZmluZSBmdW5jdGlvbiBRdWFudGl0eVZhbHVlKE9icyBPYnNlcnZhdGlvbik6CiAgRkhJUkhlbHBlcnMuVG9RdWFudGl0eShPYnMudmFsdWUgYXMgRkhJUi5RdWFudGl0eSkKCi8qKgogKiBFeHRyYWN0cyB0aGUgQ29kZWFibGVDb25jZXB0IHZhbHVlIGZyb20gYW4gT2JzZXJ2YXRpb24sIHJldHVybmluZyBpdCBhcyBhIENRTCBDb25jZXB0CiAqIEBwYXJhbSBPYnMgLSBhbiBvYnNlcnZhdGlvbgogKiBAcmV0dXJucyB7U3lzdGVtLkNvbmNlcHR9IHRoZSBPYnNlcnZhdGlvbidzIHZhbHVlIGFzIGEgY29uY2VwdCwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBDb2RlYWJlQ29uY2VwdCB2YWx1ZQogKi8KZGVmaW5lIGZ1bmN0aW9uIENvbmNlcHRWYWx1ZShPYnMgT2JzZXJ2YXRpb24pOgogIEZISVJIZWxwZXJzLlRvQ29uY2VwdChPYnMudmFsdWUgYXMgRkhJUi5Db2RlYWJsZUNvbmNlcHQpCgovKioKICogRmluZHMgdGhlIGZpcnN0IG5vbi1udWxsIG1lYW5pbmdmdWwgZGF0ZSB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBPYnNlcnZhdGlvbi4gIFRoaXMgd2lsbCBsb29rIHRocm91Z2ggdGhlCiAqIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogZWZmZWN0aXZlRGF0ZVRpbWUsIGVmZmVjdGl2ZUluc3RhbnQsIGVmZmVjdGl2ZVBlcmlvZC5lbmQsCiAqIGVmZmVjdGl2ZVBlcmlvZC5zdGFydCwgaXNzdWVkLgogKiBAcGFyYW0gT2JzIC0gYW4gT2JzZXJ2YXRpb24KICogQHJldHVybnMge1N5c3RlbS5EYXRlVGltZX0gdGhlIGZpcnN0IG5vbi1udWxsIG1lYW5pbmdmdWwgZGF0ZSwgb3IgbnVsbCBpZiBub24gaXMgZm91bmQKICovCmRlZmluZSBmdW5jdGlvbiBGaW5kRGF0ZShPYnMgT2JzZXJ2YXRpb24pOgogIENvYWxlc2NlKAogICAgKE9icy5lZmZlY3RpdmUgYXMgRkhJUi5kYXRlVGltZSkudmFsdWUsCiAgICAoT2JzLmVmZmVjdGl2ZSBhcyBGSElSLmluc3RhbnQpLnZhbHVlLAogICAgKE9icy5lZmZlY3RpdmUgYXMgRkhJUi5QZXJpb2QpLiJlbmQiLnZhbHVlLAogICAgKE9icy5lZmZlY3RpdmUgYXMgRkhJUi5QZXJpb2QpLiJzdGFydCIudmFsdWUsCiAgICBPYnMuaXNzdWVkLnZhbHVlCiAgKQoKLyoqCiAqIFRoZSBoaWdoZXN0IG9ic2VydmF0aW9uLgogKiBUaGUgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIGNvbXBhcmUgT2JzZXJ2YXRpb25zIGFuZCBkZXRlcm1pbmUgdGhlIGhpZ2hlc3Qgb25lLgogKiBAcGFyYW0gT2JzTGlzdCAtIGEgbGlzdCBvZiBPYnNlcnZhdGlvbnMKICogQHJldHVybnMge1N5c3RlbS5RdWFudGl0eX0gdGhlIHF1YW50aXR5IHdpdGggdGhlIGhpZ2hlc3QgdmFsdWUgZnJvbSB0aGUgbGlzdCwgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBIaWdoZXN0T2JzZXJ2YXRpb24oT2JzTGlzdCBMaXN0PE9ic2VydmF0aW9uPik6CiAgTWF4KE9ic0xpc3QgTyByZXR1cm4gRkhJUkhlbHBlcnMuVG9RdWFudGl0eShPLnZhbHVlIGFzIEZISVIuUXVhbnRpdHkpKQoKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENPTkRJVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIEZpbHRlcnMgQ29uZGl0aW9ucyBieSBhIGNvbmNlcHQgcmF0aGVyIHRoYW4gYnkgYSBWYWx1ZVNldC4gIEluIENRTCAxLjMsIHRoaXMgaXMgYnVpbHQgaW50byB0aGUgcmV0cmlldmUsCiAqIGJ1dCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIGtlZXAgdGhpcyBxdWVyeSB3aGVyZSBjbGF1c2UgYXMgYW4gb3B0aW9uLgogKiBAcGFyYW0gS29uY2VwdCAtIHRoZSBjb25jZXB0IHRvIGZpbHRlciBvbiAoaW50ZW50aW9uYWxseSBtaXNwZWxsZWQgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMpCiAqIEByZXR1cm5zIHtMaXN0PE9ic2VydmF0aW9uPn0gYSBsaXN0IG9mIENvbmRpdGlvbnMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gQ29uZGl0aW9uc0J5Q29uY2VwdChLb25jZXB0IFN5c3RlbS5Db25jZXB0KToKICBbQ29uZGl0aW9uXSBDIHdoZXJlIEZISVJIZWxwZXJzLlRvQ29uY2VwdChDLmNvZGUpIH4gS29uY2VwdAoKLyoqCiAqIENvbmRpdGlvbnMgdGhhdCBhcmUgY29uZmlybWVkLiBJbiBGSElSIFI0LCB0aGlzIGlzIHJlZmxlY3RlZCBieSB2ZXJpZmljYXRpb25TdGF0dXM6ICdjb25maXJtZWQnLgogKiBAc2VlIGh0dHA6Ly9obDcub3JnL2ZoaXIvUjQvdmFsdWVzZXQtY29uZGl0aW9uLXZlci1zdGF0dXMuaHRtbAogKiBAcGFyYW0gQ29uZExpc3QgLSBhIGxpc3Qgb2YgQ29uZGl0aW9ucwogKiBAcmV0dXJucyB7TGlzdDxDb25kaXRpb24+fSBhIGxpc3Qgb2YgY29uZmlybWVkIENvbmRpdGlvbnMsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gQ29uZmlybWVkKENvbmRMaXN0IExpc3Q8Q29uZGl0aW9uPik6CiAgQ29uZExpc3QgQyB3aGVyZSBDLnZlcmlmaWNhdGlvblN0YXR1cyB+ICJDb25kaXRpb24gQ29uZmlybWVkIgoKLyoqCiAqIENvbmRpdGlvbnMgdGhhdCBhcmUgYWN0aXZlLiBJbiBGSElSIFI0LCB0aGlzIGlzIHJlZmxlY3RlZCBieSBjbGluaWNhbFN0YXR1czogJ2FjdGl2ZScgYW5kIHRoZSBhYnNlbmNlIG9mIGFueQogKiBhYmF0ZW1lbnQgaW5mb3JtYXRpb24gKGkuZS4sIGlmIGl0IGFiYXRlZCwgaXQgaXMgbm8gbG9uZ2VyIGFjdGl2ZSkuCiAqIFRPRE86IFJlbmFtZSB0byBBY3RpdmUgb25jZSB0aGUgZXhlY3V0aW9uIGVuZ2luZSBzdXBwb3J0cyBvdmVybG9hZGVkIGZ1bmN0aW9ucy4KICogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LWNvbmRpdGlvbi1jbGluaWNhbC5odG1sCiAqIEBwYXJhbSBDb25kTGlzdCAtIGEgbGlzdCBvZiBDb25kaXRpb25zCiAqIEByZXR1cm5zIHtMaXN0PENvbmRpdGlvbj59IGEgbGlzdCBvZiBhY3RpdmUgQ29uZGl0aW9ucywgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBBY3RpdmVDb25kaXRpb24oQ29uZExpc3QgTGlzdDxDb25kaXRpb24+KToKICBDb25kTGlzdCBDCiAgICB3aGVyZSBDLmNsaW5pY2FsU3RhdHVzIH4gIkNvbmRpdGlvbiBBY3RpdmUiCiAgICAgIGFuZCBDLmFiYXRlbWVudCBpcyBudWxsCgovKioKICogQ29uZGl0aW9ucyB0aGF0IGFyZSBhY3RpdmUgb3IgcmVjdXJyaW5nLiBJbiBGSElSIFI0LCB0aGlzIGlzIHJlZmxlY3RlZCBieSBjbGluaWNhbFN0YXR1czogJ2FjdGl2ZScsICdyZWN1cnJlbmNlJywgb3IKICogJ3JlbGFwc2UnLiAgV2UgZG8gbm90IGNoZWNrIGZvciBudWxsIGFiYXRlbWVudCBpbmZvcm1hdGlvbiBiZWNhdXNlIGl0IG1heSBoYXZlIGRhdGVzIGZyb20gd2hlbiB0aGUgbm93IHJlY3VycmluZwogKiBjb25kaXRpb24gaW5pdGlhbGx5IHdlbnQgaW50byByZW1pc3Npb24uCiAqIEBzZWUgaHR0cDovL2hsNy5vcmcvZmhpci9SNC92YWx1ZXNldC1jb25kaXRpb24tY2xpbmljYWwuaHRtbAogKiBAcGFyYW0gQ29uZExpc3QgLSBhIGxpc3Qgb2YgQ29uZGl0aW9ucwogKiBAcmV0dXJucyB7TGlzdDxDb25kaXRpb24+fSBhIGxpc3Qgb2YgYWN0aXZlIG9yIHJlY3VycmluZyBDb25kaXRpb25zLCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIEFjdGl2ZU9yUmVjdXJyaW5nKENvbmRMaXN0IExpc3Q8Q29uZGl0aW9uPik6CiAgQ29uZExpc3QgQwogICAgd2hlcmUgQy5jbGluaWNhbFN0YXR1cyB+ICJDb25kaXRpb24gQWN0aXZlIgogICAgICBvciBDLmNsaW5pY2FsU3RhdHVzIH4gIkNvbmRpdGlvbiBSZWN1cnJlbmNlIgogICAgICBvciBDLmNsaW5pY2FsU3RhdHVzIH4gIkNvbmRpdGlvbiBSZWxhcHNlIgoKLyoqCiAqIENvbmRpdGlvbnMgd2l0aCBhbiBvbnNldCBvciByZWNvcmRlZCBkYXRlIGluIHRoZSBzcGVjaWZpZWQgImxvb2sgYmFjayIgcGVyaW9kLiAgRm9yIGV4YW1wbGUsIHByZWduYW5jeSBpbgogKiB0aGUgbGFzdCA0MiB3ZWVrcy4KICogVE9ETzogUmVuYW1lIHRvIExvb2tCYWNrIG9uY2UgdGhlIGV4ZWN1dGlvbiBlbmdpbmUgc3VwcG9ydHMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCiAqIEBwYXJhbSBDb25kTGlzdCAtIGEgbGlzdCBvZiBDb25kaXRpb25zCiAqIEByZXR1cm5zIHtMaXN0PENvbmRpdGlvbj59IGEgbGlzdCBvZiBDb25kaXRpb25zIHdpdGggb25zZXQgb3IgcmVjb3JkZWQgZGF0ZSBzcGVjaWZpZWQgbG9va2JhY2sgcGVyaW9kLCBvciBudWxsCiAqIGlmIG51bGwgd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIENvbmRpdGlvbkxvb2tCYWNrKENvbmRMaXN0IExpc3Q8Q29uZGl0aW9uPiwgTG9va0JhY2sgU3lzdGVtLlF1YW50aXR5KToKICBDb25kTGlzdCBDCiAgICBsZXQgTG9va0JhY2tJbnRlcnZhbDogSW50ZXJ2YWxbTm93KCkgLSBMb29rQmFjaywgTm93KCldCiAgICB3aGVyZSAoQy5vbnNldCBhcyBGSElSLmRhdGVUaW1lKS52YWx1ZSBpbiBMb29rQmFja0ludGVydmFsCiAgICAgIG9yIFBlcmlvZFRvSW50ZXJ2YWwoQy5vbnNldCBhcyBGSElSLlBlcmlvZCkgb3ZlcmxhcHMgTG9va0JhY2tJbnRlcnZhbAogICAgICBvciBDLnJlY29yZGVkRGF0ZS52YWx1ZSBpbiBMb29rQmFja0ludGVydmFsCgovKioKICogVGhlIG1vc3QgcmVjZW50IGNvbmRpdGlvbi4gIEZvciBlYWNoIENvbmRpdGlvbiwgdGhpcyBhbGdvcml0aG0gd2lsbCB1c2UgdGhlIENvYWxlc2NlIGZ1bmN0aW9uLCB3aGljaCB1c2VzIHRoZQogKiBmaXJzdCBub24tbnVsbCByZXN1bHQgZnJvbSB0aGVzZSBmaWVsZHM6IG9uc2V0RGF0ZVRpbWUsIG9uc2V0UGVyaW9kLmVuZCwgb25zZXRQZXJpb2Quc3RhcnQsIGFzc2VydGVkRGF0ZS4KICogVGhlIGZvdW5kIGRhdGUgd2lsbCBiZSB1c2VkIHRvIGNvbXBhcmUgQ29uZGl0aW9ucyBhbmQgZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudCBvbmUuCiAqIEBwYXJhbSBDb25kTGlzdCAtIGEgbGlzdCBvZiBDb25kaXRpb25zCiAqIEByZXR1cm5zIHtDb25kaXRpb259IHRoZSBtb3N0IHJlY2VudCBDb25kaXRpb24gZnJvbSB0aGUgbGlzdCwgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBNb3N0UmVjZW50Q29uZGl0aW9uKENvbmRMaXN0IExpc3Q8Q29uZGl0aW9uPik6CiAgTGFzdChDb25kTGlzdCBDIHNvcnQgYnkgQ29hbGVzY2UoCiAgICAob25zZXQgYXMgRkhJUi5kYXRlVGltZSkudmFsdWUsCiAgICAob25zZXQgYXMgRkhJUi5QZXJpb2QpLiJlbmQiLnZhbHVlLAogICAgKG9uc2V0IGFzIEZISVIuUGVyaW9kKS4ic3RhcnQiLnZhbHVlLAogICAgcmVjb3JkZWREYXRlLnZhbHVlKQogICkKCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQUk9DRURVUkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIC8qKgogICogRmlsdGVycyBQcm9jZWR1cmVzIGJ5IGEgY29uY2VwdCByYXRoZXIgdGhhbiBieSBhIFZhbHVlU2V0LiAgSW4gQ1FMIDEuMywgdGhpcyBpcyBidWlsdCBpbnRvIHRoZSByZXRyaWV2ZSwKICogYnV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2Uga2VlcCB0aGlzIHF1ZXJ5IHdoZXJlIGNsYXVzZSBhcyBhbiBvcHRpb24uCiAgKiBAcGFyYW0gS29uY2VwdCAtIHRoZSBjb25jZXB0IHRvIGZpbHRlciBvbiAoaW50ZW50aW9uYWxseSBtaXNwZWxsZWQgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMpCiAgKiBAcmV0dXJucyB7TGlzdDxQcm9jZWR1cmU+fSBhIGxpc3Qgb2YgUHJvY2VkdXJlcyBtYXRjaGluZyB0aGUgY29uY2VwdCwgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICAqLwogZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZXNCeUNvbmNlcHQoS29uY2VwdCBTeXN0ZW0uQ29uY2VwdCk6CiAgIFtQcm9jZWR1cmVdIFAgd2hlcmUgRkhJUkhlbHBlcnMuVG9Db25jZXB0KFAuY29kZSkgfiBLb25jZXB0CgovKioKICogUHJvY2VkdXJlcyB0aGF0IGFyZSBjb21wbGV0ZWQuIEluIEZISVIgUjQsIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IHN0YXR1czogJ2NvbXBsZXRlZCcuCiAqIEBzZWUgaHR0cDovL2hsNy5vcmcvZmhpci9SNC92YWx1ZXNldC1ldmVudC1zdGF0dXMuaHRtbAogKiBAcGFyYW0gUHJvY0xpc3QgLSBhIGxpc3Qgb2YgUHJvY2VkdXJlcwogKiBAcmV0dXJucyB7TGlzdDxQcm9jZWR1cmU+fSBhIGxpc3Qgb2YgY29tcGxldGVkIFByb2NlZHVyZXMsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gQ29tcGxldGVkKFByb2NMaXN0IExpc3Q8UHJvY2VkdXJlPik6CiAgUHJvY0xpc3QgUAogICAgd2hlcmUgUC5zdGF0dXMudmFsdWUgPSAnY29tcGxldGVkJwoKLyoqCiAqIFByb2NlZHVyZXMgdGhhdCBhcmUgaW4gcHJvZ3Jlc3MuIEluIEZISVIgUjQsIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IHN0YXR1czogJ2luLXByb2dyZXNzJy4KICogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LWV2ZW50LXN0YXR1cy5odG1sCiAqIEBwYXJhbSBQcm9jTGlzdCAtIGEgbGlzdCBvZiBQcm9jZWR1cmVzCiAqIEByZXR1cm5zIHtMaXN0PFByb2NlZHVyZT59IGEgbGlzdCBvZiBjb21wbGV0ZWQgUHJvY2VkdXJlcywgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVJblByb2dyZXNzKFByb2NMaXN0IExpc3Q8UHJvY2VkdXJlPik6CiAgUHJvY0xpc3QgUAogICAgd2hlcmUgUC5zdGF0dXMudmFsdWUgPSAnaW4tcHJvZ3Jlc3MnCgovKioKICogUHJvY2VkdXJlcyB0aGF0IGFjdHVhbGx5IGhhcHBlbmVkIG9yIGFyZSBoYXBwZW5pbmcuIEluIEZISVIgUjQsIHRoZXJlIGFyZSBhIGZldyBwcm9wZXJ0aWVzIHRoYXQgbmVnYXRlIHRoZQogKiBwcm9jZWR1cmUsIG1vc3Qgbm90YWJseSB3aGVuIHN0YXR1cyBpcyAncHJlcGFyYXRpb24nLCAnbm90LWRvbmUnLCAnZW50ZXJlZC1pbi1lcnJvcicsIG9yICd1bmtub3duJy4KICogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LWV2ZW50LXN0YXR1cy5odG1sCiAqIEBwYXJhbSBQcm9jTGlzdCAtIGEgbGlzdCBvZiBQcm9jZWR1cmVzCiAqIEByZXR1cm5zIHtMaXN0PFByb2NlZHVyZT59IGEgbGlzdCBvZiBQcm9jZWR1cmVzIHRoYXQgYWN0dWFsbHkgaGFwcGVuZWQgb3IgYXJlIGhhcHBlbmluZywgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVQZXJmb3JtYW5jZShQcm9jTGlzdCBMaXN0PFByb2NlZHVyZT4pOgogIFByb2NMaXN0IFAKICAgIHdoZXJlIG5vdCAoUC5zdGF0dXMudmFsdWUgaW4geydwcmVwYXJhdGlvbicsICdub3QtZG9uZScsICdlbnRlcmVkLWluLWVycm9yJywgJ3Vua25vd24nfSkKCi8qKgogKiBQcm9jZWR1cmVzIHBlcmZvcm1lZCBpbiB0aGUgc3BlY2lmaWVkICJsb29rIGJhY2siIHBlcmlvZC4gIEZvciBleGFtcGxlLCBQQ0lzIHBlcmZvcm1lZCBpbiB0aGUKICogcGFzdCAyIHdlZWtzLgogKiBUT0RPOiBSZW5hbWUgdG8gTG9va0JhY2sgb25jZSB0aGUgZXhlY3V0aW9uIGVuZ2luZSBzdXBwb3J0cyBvdmVybG9hZGVkIGZ1bmN0aW9ucy4KICogQHBhcmFtIFByb2NMaXN0IC0gYSBsaXN0IG9mIFByb2NlZHVyZXMKICogQHBhcmFtIExvb2tCYWNrIC0gdGhlIGxvb2tiYWNrIHBlcmlvZCBmb3Igd2hlbiB0aGUgcHJvY2VkdXJlIHdhcyBwZXJmb3JtZWQKICogQHJldHVybnMge0xpc3Q8UHJvY2VkdXJlPn0gYSBsaXN0IG9mIFByb2NlZHVyZXMgcGVyZm9ybWVkIGluIHRoZSBsb29rIGJhY2sgcGVyaW9kLCBvciBudWxsIGlmIG51bGwKICogd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZUxvb2tCYWNrKFByb2NMaXN0IExpc3Q8UHJvY2VkdXJlPiwgTG9va0JhY2sgU3lzdGVtLlF1YW50aXR5KToKICBQcm9jTGlzdCBQCiAgICBsZXQgTG9va0JhY2tJbnRlcnZhbDogSW50ZXJ2YWxbTm93KCkgLSBMb29rQmFjaywgTm93KCldCiAgICB3aGVyZSAoUC5wZXJmb3JtZWQgYXMgRkhJUi5kYXRlVGltZSkudmFsdWUgaW4gTG9va0JhY2tJbnRlcnZhbAogICAgICBvciBQZXJpb2RUb0ludGVydmFsKFAucGVyZm9ybWVkIGFzIEZISVIuUGVyaW9kKSBvdmVybGFwcyBMb29rQmFja0ludGVydmFsCgovKioKICogVGhlIG1vc3QgcmVjZW50IHByb2NlZHVyZS4gIEZvciBlYWNoIFByb2NlZHVyZSwgdGhpcyBhbGdvcml0aG0gd2lsbCB1c2UgdGhlIENvYWxlc2NlIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIHRoZQogKiBmaXJzdCBub24tbnVsbCByZXN1bHQgZnJvbSB0aGVzZSBmaWVsZHM6IHBlcmZvcm1lZERhdGVUaW1lLCBwZXJmb3JtZWRQZXJpb2QuZW5kLCBwZXJmb3JtZWRQZXJpb2Quc3RhcnQuCiAqIFRoZSBmb3VuZCBkYXRlIHdpbGwgYmUgdXNlZCB0byBjb21wYXJlIFByb2NlZHVyZXMgYW5kIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgb25lLgogKiBAcGFyYW0gUHJvY0xpc3QgLSBhIGxpc3Qgb2YgUHJvY2VkdXJlcwogKiBAcmV0dXJucyB7UHJvY2VkdXJlfSB0aGUgbW9zdCByZWNlbnQgUHJvY2VkdXJlIGZyb20gdGhlIGxpc3QsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gTW9zdFJlY2VudFByb2NlZHVyZShQcm9jTGlzdCBMaXN0PFByb2NlZHVyZT4pOgogIExhc3QoUHJvY0xpc3QgUCBzb3J0IGJ5IENvYWxlc2NlKAogICAgKHBlcmZvcm1lZCBhcyBGSElSLmRhdGVUaW1lKS52YWx1ZSwKICAgIChwZXJmb3JtZWQgYXMgRkhJUi5QZXJpb2QpLiJlbmQiLnZhbHVlLAogICAgKHBlcmZvcm1lZCBhcyBGSElSLlBlcmlvZCkuInN0YXJ0Ii52YWx1ZSkKICApCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTRVJWSUNFUkVRVUVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIE5PVEU6IEluIEZISVIgUjQsIFByb2NlZHVyZVJlcXVlc3QgYW5kIFJlZmVycmFsUmVxdWVzdCBhcmUgcmVwbGFjZWQgYnkgU2VydmljZVJlcXVlc3QKCi8qKgogKiBTZXJ2aWNlUmVxdWVzdHMgdGhhdCBhcmUgYWN0aXZlIG9yIGNvbXBsZXRlZC4gSW4gRkhJUiBSNCwgdGhpcyBpcyByZWZsZWN0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKICogc3RhdHVzIHZhbHVlcy4KICogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LXJlcXVlc3Qtc3RhdHVzLmh0bWwKICogQHBhcmFtIFNlcnZpY2VSZXF1ZXN0TGlzdCAtIGEgbGlzdCBvZiBTZXJ2aWNlUmVxdWVzdHMKICogQHJldHVybnMge0xpc3Q8U2VydmljZVJlcXVlc3Q+fSBhIGxpc3Qgb2YgYWNjZXB0ZWQsIGluLXByb2dyZXNzLCBvciBjb21wbGV0ZWQgUHJvY2VkdXJlUmVxdWVzdHMsCiAqIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gU2VydmljZVJlcXVlc3RBY3RpdmVPckNvbXBsZXRlZChTZXJ2aWNlUmVxdWVzdExpc3QgTGlzdDxTZXJ2aWNlUmVxdWVzdD4pOgogIFNlcnZpY2VSZXF1ZXN0TGlzdCBTCiAgICB3aGVyZSBTLnN0YXR1cy52YWx1ZSBpbiBMaXN0eydhY3RpdmUnLCAnY29tcGxldGVkJ30KCi8qKgogKiBTZXJ2aWNlUmVxdWVzdHMgb3JkZXJlZCBpbiB0aGUgc3BlY2lmaWVkICJsb29rIGJhY2siIHBlcmlvZC4gIEZvciBleGFtcGxlLCBQQ0lzIG9yZGVyZWQgaW4gdGhlCiAqIHBhc3QgMiB3ZWVrcy4KICogVE9ETzogUmVuYW1lIHRvIExvb2tCYWNrIG9uY2UgdGhlIGV4ZWN1dGlvbiBlbmdpbmUgc3VwcG9ydHMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCiAqIEBwYXJhbSBTZXJ2aWNlUmVxdWVzdExpc3QgLSBhIGxpc3Qgb2YgU2VydmljZVJlcXVlc3RzCiAqIEBwYXJhbSBMb29rQmFjayAtIHRoZSBsb29rYmFjayBwZXJpb2QgZm9yIHdoZW4gdGhlIHNlcnZpY2Ugd2FzIG9yZGVyZWQKICogQHJldHVybnMge0xpc3Q8U2VydmljZVJlcXVlc3Q+fSBhIGxpc3Qgb2YgU2VydmljZVJlcXVlc3RzIG9yZGVyZWQgaW4gdGhlIGxvb2sgYmFjayBwZXJpb2QsIG9yIG51bGwgaWYgbnVsbAogKiB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gU2VydmljZVJlcXVlc3RMb29rQmFjayhTZXJ2aWNlUmVxdWVzdExpc3QgTGlzdDxTZXJ2aWNlUmVxdWVzdD4sIExvb2tCYWNrIFN5c3RlbS5RdWFudGl0eSk6CiAgU2VydmljZVJlcXVlc3RMaXN0IFMKICAgIHdoZXJlIFMuYXV0aG9yZWRPbi52YWx1ZSBpbiBJbnRlcnZhbFtOb3coKSAtIExvb2tCYWNrLCBOb3coKV0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1FRElDQVRJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIEZpbHRlcnMgTWVkaWNhdGlvblN0YXRlbWVudHMgYnkgYSBjb25jZXB0IHJhdGhlciB0aGFuIGJ5IGEgVmFsdWVTZXQuICBJbiBDUUwgMS4zLCB0aGlzIGlzIGJ1aWx0IGludG8gdGhlIHJldHJpZXZlLAogKiBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBrZWVwIHRoaXMgcXVlcnkgd2hlcmUgY2xhdXNlIGFzIGFuIG9wdGlvbi4KICogQHBhcmFtIEtvbmNlcHQgLSB0aGUgY29uY2VwdCB0byBmaWx0ZXIgb24gKGludGVudGlvbmFsbHkgbWlzcGVsbGVkIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzKQogKiBAcmV0dXJucyB7TGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pn0gYSBsaXN0IG9mIE1lZGljYXRpb25TdGF0ZW1lbnQgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblN0YXRlbWVudHNCeUNvbmNlcHQoS29uY2VwdCBTeXN0ZW0uQ29uY2VwdCk6CiAgW01lZGljYXRpb25TdGF0ZW1lbnRdIE0gd2hlcmUgRkhJUkhlbHBlcnMuVG9Db25jZXB0KE0ubWVkaWNhdGlvbiBhcyBGSElSLkNvZGVhYmxlQ29uY2VwdCkgfiBLb25jZXB0CgovKioKICogRmlsdGVycyBNZWRpY2F0aW9uUmVxdWVzdHMgYnkgYSBjb25jZXB0IHJhdGhlciB0aGFuIGJ5IGEgVmFsdWVTZXQuICBJbiBDUUwgMS4zLCB0aGlzIGlzIGJ1aWx0IGludG8gdGhlIHJldHJpZXZlLAogKiBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBrZWVwIHRoaXMgcXVlcnkgd2hlcmUgY2xhdXNlIGFzIGFuIG9wdGlvbi4KICogQHBhcmFtIEtvbmNlcHQgLSB0aGUgY29uY2VwdCB0byBmaWx0ZXIgb24gKGludGVudGlvbmFsbHkgbWlzcGVsbGVkIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzKQogKiBAcmV0dXJucyB7TGlzdDxNZWRpY2F0aW9uUmVxdWVzdD59IGEgbGlzdCBvZiBNZWRpY2F0aW9uUmVxdWVzdHMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3RzQnlDb25jZXB0KEtvbmNlcHQgU3lzdGVtLkNvbmNlcHQpOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTSB3aGVyZSBGSElSSGVscGVycy5Ub0NvbmNlcHQoTS5tZWRpY2F0aW9uIGFzIEZISVIuQ29kZWFibGVDb25jZXB0KSB+IEtvbmNlcHQKCi8qKgogKiBNZWRpY2F0aW9ucyB0aGF0IGFyZSBhY3RpdmUsIGFjY29yZGluZyB0byBhIHN0YXRlbWVudCwgYnV0IG5vdCBuZWNlc3NhcmlseSB2ZXJpZmllZCB2aWEgYSBwcmVzY3JpcHRpb24uICBGb3IgZXhhbXBsZSwKICogbWVkaWNhdGlvbnMgdGhhdCBhIHBhdGllbnQgaGFzIHNlbGYtcmVwb3J0ZWQgdG8gYmUgdGFraW5nLiAgVGhpcyBtYXksIGhvd2V2ZXIsIGFsc28gcmVwcmVzZW50IG1lZGljYXRpb25zIHRoYXQgYXJlCiAqIGV4cGVjdGVkIHRvIGJlIGFjdGl2ZSBhZnRlciBwcm92aWRpbmcgYSBwcmVzY3JpcHRpb24gKGUuZy4sIGNsaW5pY2lhbi1yZXBvcnRlZCkuIEluIEZISVIgUjQsIHRoaXMgaXMgcmVmbGVjdGVkIGJ5CiAqIE1lZGljYXRpb25TdGF0ZW1lbnQgd2l0aCBzdGF0dXMgJ2FjdGl2ZScgYW5kIG5vIGVuZCBkYXRlIG9yIGFuIGVuZCBkYXRlIGluIHRoZSBmdXR1cmUuCiAqIFRPRE86IFJlbmFtZSB0byBBY3RpdmUgb25jZSB0aGUgZXhlY3V0aW9uIGVuZ2luZSBzdXBwb3J0cyBvdmVybG9hZGVkIGZ1bmN0aW9ucy4KICogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LW1lZGljYXRpb24tc3RhdGVtZW50LXN0YXR1cy5odG1sCiAqIEBwYXJhbSBNZWRMaXN0IC0gYSBsaXN0IG9mIE1lZGljYXRpb25TdGF0ZW1lbnRzCiAqIEByZXR1cm5zIHtMaXN0PE1lZGljYXRpb25TdGF0ZW1lbnQ+fSBhIGxpc3Qgb2YgYWN0aXZlIG1lZGljYXRpb24gc3RhdGVtZW50cywgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBBY3RpdmVNZWRpY2F0aW9uU3RhdGVtZW50KE1lZExpc3QgTGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pik6CiAgTWVkTGlzdCBNCiAgICBsZXQgRWZmZWN0aXZlUGVyaW9kOiBQZXJpb2RUb0ludGVydmFsKE0uZWZmZWN0aXZlIGFzIEZISVIuUGVyaW9kKQogICAgd2hlcmUgTS5zdGF0dXMudmFsdWUgPSAnYWN0aXZlJwogICAgICBhbmQgKGVuZCBvZiBFZmZlY3RpdmVQZXJpb2QgaXMgbnVsbCBvciBlbmQgb2YgRWZmZWN0aXZlUGVyaW9kIGFmdGVyIE5vdygpKQoKLyoqCiogTWVkaWNhdGlvbiByZXF1ZXN0cyB0aGF0IGFyZSBhY3RpdmUuICBJbiBGSElSIFI0LCB0aGlzIGlzIHJlZmxlY3RlZCBieSBNZWRpY2F0aW9uUmVxdWVzdCB3aXRoIHN0YXR1cyAnYWN0aXZlJy4KKiBOb3RlIHRoYXQgaW4gUjQsIHRoZSBNZWRpY2F0aW9uUmVxdWVzdCBCb3VuZGFyaWVzIGFuZCBSZWxhdGlvbnNoaXBzIG5vdyBzYXlzOiAiV2hlbiByZXBvcnRpbmcgb24gdGhlIHVzYWdlIG9mCiogYSBtZWRpY2F0aW9uIGJ5IGEgcGF0aWVudCwgdGhlIE1lZGljYXRpb25TdGF0ZW1lbnQgcmVzb3VyY2Ugc2hvdWxkIGJlIHVzZWQuIiBJdCBhbHNvIGluZGljYXRlcyB0aGF0OgoqICJBIG1lZGljYXRpb24gc3RhdGVtZW50IGlzIG5vdCBhIHBhcnQgb2YgdGhlIHByZXNjcmliZS0+ZGlzcGVuc2UtPmFkbWluaXN0ZXIgc2VxdWVuY2UgYnV0IGlzIGEgcmVwb3J0IHRoYXQKKiBzdWNoIGEgc2VxdWVuY2UgKG9yIGF0IGxlYXN0IGEgcGFydCBvZiBpdCkgZGlkIHRha2UgcGxhY2UgcmVzdWx0aW5nIGluIGEgYmVsaWVmIHRoYXQgdGhlIHBhdGllbnQgaGFzIHJlY2VpdmVkCiogYSBwYXJ0aWN1bGFyIG1lZGljYXRpb24uIiBJbiB0aGlzIHJlZ2FyZCwgTWVkaWNhdGlvblN0YXRlbWVudCBpcyBtb3JlIGFwcHJvcHJpYXRlIGFzIGFuIGluZGljYXRpb24gb2YgYW4gYWN0dWFsbHkKKiBhY3RpdmUgbWVkaWNhdGlvbiwgYWx0aG91Z2ggaXQncyBub3QgY2xlYXIgaWYgdmVuZG9ycyByZWFsbHkgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBNZWRpY2F0aW9uU3RhdGVtZW50cyBpbgoqIHRoZXNlIGNhc2VzIG9yIG5vdC4gIFVudGlsIHdlIGtub3csIE1lZGljYXRpb25SZXF1ZXN0IG1heSBiZSB0aGUgYmVzdCBwcm94eSB3ZSBoYXZlIGZvciBhbiBhY3RpdmUgbWVkaWNhdGlvbi4KKiBUT0RPOiBTaG91bGQgdGhlICJpbnRlbnQiIGZpZWxkIGJlIGNvbnNpZGVyZWQgKGUuZy4sIGlzIGl0IHN0aWxsIGFjdGl2ZSBpZiBpbnRlbnQgaXMgInByb3Bvc2FsIiBvciAicGxhbiIpPwoqIFRPRE86IFJlbmFtZSB0byBBY3RpdmUgb25jZSB0aGUgZXhlY3V0aW9uIGVuZ2luZSBzdXBwb3J0cyBvdmVybG9hZGVkIGZ1bmN0aW9ucy4KKiBAc2VlIGh0dHA6Ly9obDcub3JnL2ZoaXIvUjQvdmFsdWVzZXQtbWVkaWNhdGlvbnJlcXVlc3Qtc3RhdHVzLmh0bWwKKiBAcGFyYW0gTWVkTGlzdCAtIGEgbGlzdCBvZiBNZWRpY2F0aW9uUmVxdWVzdHMKKiBAcmV0dXJucyB7TGlzdDxNZWRpY2F0aW9uUmVxdWVzdD59IGEgbGlzdCBvZiBhY3RpdmUgbWVkaWNhdGlvbiByZXF1ZXN0cywgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KKi8KZGVmaW5lIGZ1bmN0aW9uIEFjdGl2ZU1lZGljYXRpb25SZXF1ZXN0KE1lZExpc3QgTGlzdDxNZWRpY2F0aW9uUmVxdWVzdD4pOgogIE1lZExpc3QgTSB3aGVyZSBNLnN0YXR1cy52YWx1ZSA9ICdhY3RpdmUnCgovKioKKiBNZWRpY2F0aW9uIHJlcXVlc3RzIHRoYXQgYXJlIGFjdGl2ZSBvciBjb21wbGV0ZWQsIGFjY29yZGluZyB0byBhIHByZXNjcmlwdGlvbi4gIEluIEZISVIgUjQsIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IE1lZGljYXRpb25SZXF1ZXN0Ciogd2l0aCBzdGF0dXMgJ2FjdGl2ZScgb3IgJ2NvbXBsZXRlZCcuICBTZWUgdGhlIG5vdGUgYWJvdmUgKGluIEFjdGl2ZU1lZGljYXRpb25SZXF1ZXN0KSBmb3IgbW9yZSBudWFuY2UgcmVnYXJkaW5nIE1lZGljYXRpb25SZXF1ZXN0CiogdnMuIE1lZGljYXRpb25TdGF0ZW1lbnQuCiogQHNlZSBodHRwOi8vaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LW1lZGljYXRpb25yZXF1ZXN0LXN0YXR1cy5odG1sCiogQHBhcmFtIE1lZExpc3QgLSBhIGxpc3Qgb2YgTWVkaWNhdGlvblJlcXVlc3RzCiogQHJldHVybnMge0xpc3Q8TWVkaWNhdGlvblJlcXVlc3Q+fSBhIGxpc3Qgb2YgYWN0aXZlIG1lZGljYXRpb24gcmVxdWVzdHMsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiovCmRlZmluZSBmdW5jdGlvbiBBY3RpdmVPckNvbXBsZXRlZE1lZGljYXRpb25SZXF1ZXN0KE1lZExpc3QgTGlzdDxNZWRpY2F0aW9uUmVxdWVzdD4pOgogIE1lZExpc3QgTQogICAgd2hlcmUgTS5zdGF0dXMudmFsdWUgPSAnYWN0aXZlJwogICAgICBvciBNLnN0YXR1cy52YWx1ZSA9ICdjb21wbGV0ZWQnCgovKioKICogTWVkaWNhdGlvbnMgdGhhdCBhcmUgYWN0aXZlIG9yIGNvbXBsZXRlZCwgYWNjb3JkaW5nIHRvIGEgc3RhdGVtZW50LCBidXQgbm90IG5lY2Vzc2FyaWx5IHZlcmlmaWVkIHZpYSBhIHByZXNjcmlwdGlvbi4KICogRm9yIGV4YW1wbGUsIG1lZGljYXRpb25zIHRoYXQgYSBwYXRpZW50IGhhcyBzZWxmLXJlcG9ydGVkIHRvIGJlIHRha2luZy4gIFRoaXMgbWF5LCBob3dldmVyLCBhbHNvIHJlcHJlc2VudAogKiBtZWRpY2F0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBhY3RpdmUgYWZ0ZXIgcHJvdmlkaW5nIGEgcHJlc2NyaXB0aW9uIChlLmcuLCBjbGluaWNpYW4tcmVwb3J0ZWQpLiAgSW4gRkhJUiBSNCwKICogdGhpcyBpcyByZWZsZWN0ZWQgYnkgTWVkaWNhdGlvblN0YXRlbWVudCB3aXRoIHN0YXR1cyAnYWN0aXZlJyBvciAnY29tcGxldGVkJy4KICogVE9ETzogUmVuYW1lIHRvIEFjdGl2ZU9yQ29tcGxldGVkIG9uY2UgdGhlIGV4ZWN1dGlvbiBlbmdpbmUgc3VwcG9ydHMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCiAqIEBzZWUgaHR0cDovL2hsNy5vcmcvZmhpci9SNC92YWx1ZXNldC1tZWRpY2F0aW9uLXN0YXRlbWVudC1zdGF0dXMuaHRtbAogKiBAcGFyYW0gTWVkTGlzdCAtIGEgbGlzdCBvZiBNZWRpY2F0aW9uU3RhdGVtZW50cwogKiBAcmV0dXJucyB7TGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pn0gYSBsaXN0IG9mIGFjdGl2ZSBvciBjb21wbGV0ZWQgbWVkaWNhdGlvbiBzdGF0ZW1lbnRzLCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZAogKiAgIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gQWN0aXZlT3JDb21wbGV0ZWRNZWRpY2F0aW9uU3RhdGVtZW50KE1lZExpc3QgTGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pik6CiAgTWVkTGlzdCBNCiAgICB3aGVyZSBNLnN0YXR1cy52YWx1ZSA9ICdhY3RpdmUnCiAgICAgIG9yIE0uc3RhdHVzLnZhbHVlID0gJ2NvbXBsZXRlZCcKCi8qKgoqIE1lZGljYXRpb24gcmVxdWVzdHMgdGhhdCBhcmUgYWN0aXZlLCBjb21wbGV0ZWQsIG9yIHN0b3BwZWQsIGFjY29yZGluZyB0byBhIHByZXNjcmlwdGlvbi4gIEluIEZISVIgUjQsIHRoaXMgaXMKKiByZWZsZWN0ZWQgYnkgTWVkaWNhdGlvblJlcXVlc3Qgd2l0aCBzdGF0dXMgJ2FjdGl2ZScsICdjb21wbGV0ZWQnLCBvciAnc3RvcHBlZCcuIFNlZSB0aGUgbm90ZSBhYm92ZQoqIChpbiBBY3RpdmVNZWRpY2F0aW9uUmVxdWVzdCkgZm9yIG1vcmUgbnVhbmNlIHJlZ2FyZGluZyBNZWRpY2F0aW9uUmVxdWVzdCB2cy4gTWVkaWNhdGlvblN0YXRlbWVudC4KKiBAc2VlIGh0dHA6Ly9obDcub3JnL2ZoaXIvUjQvdmFsdWVzZXQtbWVkaWNhdGlvbnJlcXVlc3Qtc3RhdHVzLmh0bWwKKiBAcGFyYW0gTWVkTGlzdCAtIGEgbGlzdCBvZiBNZWRpY2F0aW9uT3JkZXJzCiogQHJldHVybnMge0xpc3Q8TWVkaWNhdGlvblJlcXVlc3RyPn0gYSBsaXN0IG9mIGFjdGl2ZSBtZWRpY2F0aW9uIHJlcXVlc3RzLCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZCBpbgoqLwpkZWZpbmUgZnVuY3Rpb24gQWN0aXZlQ29tcGxldGVkT3JTdG9wcGVkTWVkaWNhdGlvblJlcXVlc3QoTWVkTGlzdCBMaXN0PE1lZGljYXRpb25SZXF1ZXN0Pik6CiAgTWVkTGlzdCBNCiAgICB3aGVyZSBNLnN0YXR1cy52YWx1ZSA9ICdhY3RpdmUnCiAgICAgIG9yIE0uc3RhdHVzLnZhbHVlID0gJ2NvbXBsZXRlZCcKICAgICAgb3IgTS5zdGF0dXMudmFsdWUgPSAnc3RvcHBlZCcKCi8qKgoqIE1lZGljYXRpb24gcmVxdWVzdHMgdGhhdCBhcmUgaXNzdWVkIGluIHRoZSBzcGVjaWZpZWQgImxvb2sgYmFjayIgcGVyaW9kLgoqIFRPRE86IFJlbmFtZSB0byBMb29rQmFjayBvbmNlIHRoZSBleGVjdXRpb24gZW5naW5lIHN1cHBvcnRzIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgoqIEBwYXJhbSBNZWRMaXN0IC0gYSBsaXN0IG9mIE1lZGljYXRpb25zCiogQHBhcmFtIExvb2tCYWNrIC0gdGhlIGxvb2tiYWNrIHBlcmlvZCBmb3Igd2hlbiB0aGUgbWVkaWNhdGlvbiB3YXMgcHJlc2NyaWJlZAoqIEByZXR1cm5zIHtMaXN0PE1lZGljYXRpb25SZXF1ZXN0Pn0gYSBsaXN0IG9mIE1lZGljYXRpb25zIHByZXNjcmliZWQgaW4gdGhlIGxvb2sgYmFjayBwZXJpb2QsIG9yIG51bGwgaWYgbnVsbAoqIHdhcyBwYXNzZWQgaW4KKi8KZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25SZXF1ZXN0TG9va0JhY2soTWVkTGlzdCBMaXN0PE1lZGljYXRpb25SZXF1ZXN0PiwgTG9va0JhY2sgU3lzdGVtLlF1YW50aXR5KToKICBNZWRMaXN0IE0KICAgIGxldCBMb29rQmFja0ludGVydmFsOiBJbnRlcnZhbFtOb3coKSAtIExvb2tCYWNrLCBOb3coKV0KICAgIHdoZXJlIE0uYXV0aG9yZWRPbi52YWx1ZSBpbiBMb29rQmFja0ludGVydmFsCiAgICAvLyBEU1RVMiBhbHNvIGNoZWNrZWQgdGhlIGRhdGVFbmRlZCBwcm9wZXJ0eSBvZiBNZWRpY2F0aW9uT3JkZXIsIGJ1dCB0aGlzIGRvZXNuJ3QgZXhpc3QgZm9yIE1lZGljYXRpb25SZXF1ZXN0Ci8qKgoqIE1lZGljYXRpb24gU3RhdGVtZW50cyB0aGF0IGFyZSBpc3N1ZWQgaW4gdGhlIHNwZWNpZmllZCAibG9vayBiYWNrIiBwZXJpb2QuCiogVE9ETzogUmVuYW1lIHRvIExvb2tCYWNrIG9uY2UgdGhlIGV4ZWN1dGlvbiBlbmdpbmUgc3VwcG9ydHMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCiogQHBhcmFtIE1lZExpc3QgLSBhIGxpc3Qgb2YgTWVkaWNhdGlvbnMKKiBAcGFyYW0gTG9va0JhY2sgLSB0aGUgbG9va2JhY2sgcGVyaW9kIGZvciB3aGVuIHRoZSBtZWRpY2F0aW9uIHdhcyBwcmVzY3JpYmVkCiogQHJldHVybnMge0xpc3Q8TWVkaWNhdGlvblN0YXRlbWVudD59IGEgbGlzdCBvZiBNZWRpY2F0aW9ucyBwcmVzY3JpYmVkIGluIHRoZSBsb29rIGJhY2sgcGVyaW9kLCBvciBudWxsIGlmIG51bGwKKiB3YXMgcGFzc2VkIGluCiovCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uU3RhdGVtZW50TG9va0JhY2soTWVkTGlzdCBMaXN0PE1lZGljYXRpb25TdGF0ZW1lbnQ+LCBMb29rQmFjayBTeXN0ZW0uUXVhbnRpdHkpOgogIE1lZExpc3QgTQogICAgbGV0IExvb2tCYWNrSW50ZXJ2YWw6IEludGVydmFsW05vdygpIC0gTG9va0JhY2ssIE5vdygpXQogICAgd2hlcmUgKE0uZWZmZWN0aXZlIGFzIEZISVIuZGF0ZVRpbWUpLnZhbHVlIGluIExvb2tCYWNrSW50ZXJ2YWwKICAgICAgb3IgUGVyaW9kVG9JbnRlcnZhbChNLmVmZmVjdGl2ZSBhcyBGSElSLlBlcmlvZCkgb3ZlcmxhcHMgTG9va0JhY2tJbnRlcnZhbAovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkNPVU5URVJTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovKioKICogRmlsdGVycyBFbmNvdW50ZXJzIGJ5IGEgY29uY2VwdCByYXRoZXIgdGhhbiBieSBhIFZhbHVlU2V0LiAgSW4gQ1FMIDEuMywgdGhpcyBpcyBidWlsdCBpbnRvIHRoZSByZXRyaWV2ZSwKICogYnV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2Uga2VlcCB0aGlzIHF1ZXJ5IHdoZXJlIGNsYXVzZSBhcyBhbiBvcHRpb24uCiAqIEBwYXJhbSBLb25jZXB0IC0gdGhlIGNvbmNlcHQgdG8gZmlsdGVyIG9uIChpbnRlbnRpb25hbGx5IG1pc3BlbGxlZCB0byBhdm9pZCBuYW1pbmcgY2xhc2hlcykKICogQHJldHVybnMge0xpc3Q8RW5jb3VudGVyPn0gYSBsaXN0IG9mIEVuY291bnRlcnMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyc0J5Q29uY2VwdChLb25jZXB0IFN5c3RlbS5Db25jZXB0KToKICBbRW5jb3VudGVyXSBFIHdoZXJlIGV4aXN0cyggKEUudHlwZSkgRVQgd2hlcmUgRkhJUkhlbHBlcnMuVG9Db25jZXB0KEVUKSB+IEtvbmNlcHQgKQovKioKICogRW5jb3VudGVycyB0aGF0IGFyZSBpbiBwcm9ncmVzcy4gSW4gRkhJUiBSNCwgdGhpcyBpcyByZWZsZWN0ZWQgYnkgc3RhdHVzOiAnaW4tcHJvZ3Jlc3MnLgogKiBAc2VlIGh0dHA6Ly9obDcub3JnL2ZoaXIvUjQvdmFsdWVzZXQtZW5jb3VudGVyLXN0YXR1cy5odG1sCiAqIEBwYXJhbSBFbmNMaXN0IC0gYSBsaXN0IG9mIEVuY291bnRlcnMKICogQHJldHVybnMge0xpc3Q8RW5jb3VudGVyPn0gYSBsaXN0IG9mIGluIHByb2dyZXNzIGVuY291bnRlcnMsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gSW5Qcm9ncmVzcyhFbmNMaXN0IExpc3Q8RW5jb3VudGVyPik6CiAgRW5jTGlzdCBFCiAgICB3aGVyZSBFLnN0YXR1cy52YWx1ZSA9ICdpbi1wcm9ncmVzcycKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUxMRVJHWSBJTlRPTEVSQU5DRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8qKgogKiBGaWx0ZXJzIEFsbGVyZ3lJbnRvbGVyYW5jZXMgYnkgYSBjb25jZXB0IHJhdGhlciB0aGFuIGJ5IGEgVmFsdWVTZXQuICBJbiBDUUwgMS4zLCB0aGlzIGlzIGJ1aWx0IGludG8gdGhlIHJldHJpZXZlLAogKiBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBrZWVwIHRoaXMgcXVlcnkgd2hlcmUgY2xhdXNlIGFzIGFuIG9wdGlvbi4KICogQHBhcmFtIEtvbmNlcHQgLSB0aGUgY29uY2VwdCB0byBmaWx0ZXIgb24gKGludGVudGlvbmFsbHkgbWlzcGVsbGVkIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzKQogKiBAcmV0dXJucyB7TGlzdDxBbGxlcmd5SW50b2xlcmFuY2U+fSBhIGxpc3Qgb2YgQWxsZXJneSBJbnRvbGVyYW5jZXMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gQWxsZXJneUludG9sZXJhbmNlc0J5Q29uY2VwdChLb25jZXB0IFN5c3RlbS5Db25jZXB0KToKICBbQWxsZXJneUludG9sZXJhbmNlXSBBIHdoZXJlIEZISVJIZWxwZXJzLlRvQ29uY2VwdChBLmNvZGUpIH4gS29uY2VwdAovKioKKiBBbGxlcmd5SW50b2xlcmFuY2VzIHRoYXQgYXJlIGFjdGl2ZSBvciBjb25maXJtZWQuICBJbiBGSElSIFNUVTMsIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IEFsbGVyZ3lJbnRvbGVyYW5jZQoqIHdpdGggY2xpbmljYWxTdGF0dXMgJ2FjdGl2ZScgb3IgdmVyaWZpY2F0aW9uU3RhdHVzICdjb25maXJtZWQnCiogQHNlZSBodHRwczovL3d3dy5obDcub3JnL2ZoaXIvUjQvdmFsdWVzZXQtYWxsZXJneS1jbGluaWNhbC1zdGF0dXMuaHRtbAoqIEBzZWUgaHR0cHM6Ly93d3cuaGw3Lm9yZy9maGlyL1I0L3ZhbHVlc2V0LWFsbGVyZ3ktdmVyaWZpY2F0aW9uLXN0YXR1cy5odG1sCiogQHBhcmFtIEFsbGVyZ3lJbnRvbExpc3QgLSBhIGxpc3Qgb2YgQWxsZXJneUludG9sZXJhbmNlcwoqIEByZXR1cm5zIHtMaXN0PEFsbGVyZ3lJbnRvbGVyYW5jZT59IGEgbGlzdCBvZiBhY3RpdmUgb3IgY29uZmlybWVkIGFsbGVyZ3kgaW50b2xlcmFuY2VzLCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZCBpbgoqLwpkZWZpbmUgZnVuY3Rpb24gQWN0aXZlT3JDb25maXJtZWRBbGxlcmd5SW50b2xlcmFuY2UoQWxsZXJneUludG9sTGlzdCBMaXN0PEFsbGVyZ3lJbnRvbGVyYW5jZT4pOgogIEFsbGVyZ3lJbnRvbExpc3QgQQogICAgd2hlcmUgQS5jbGluaWNhbFN0YXR1cyB+ICJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIgogICAgICBvciBBLnZlcmlmaWNhdGlvblN0YXR1cyB+ICJBbGxlcmd5SW50b2xlcmFuY2UgQ29uZmlybWVkIgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHT0FMUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLyoqCiAqIEdvYWxzIHdpdGggYSBzdGFydCwgdGFyZ2V0LCBvciBzdGF0dXMgZGF0ZSBpbiB0aGUgc3BlY2lmaWVkICJsb29rIGJhY2siIHBlcmlvZC4gIEZvciBleGFtcGxlLCBQYWluIE1hbmFnZW1lbnQgR29hbHMKICogaW4gdGhlIGxhc3QgMiB5ZWFycy4KICogVE9ETzogUmVuYW1lIHRvIExvb2tCYWNrIG9uY2UgdGhlIGV4ZWN1dGlvbiBlbmdpbmUgc3VwcG9ydHMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCiAqIEBwYXJhbSBHb2FsTGlzdCAtIGEgbGlzdCBvZiBHb2FscwogKiBAcmV0dXJucyB7TGlzdDxHb2FsPn0gYSBsaXN0IG9mIEdvYWxzIHdpdGggYSBzdGFydCwgdGFyZ2V0LCBvciBzdGF0dXMgZGF0ZSBpbiB0aGUgc3BlY2lmaWVkIGxvb2tiYWNrIHBlcmlvZCwgb3IgbnVsbAogKiBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBHb2FsTG9va0JhY2soR29hbExpc3QgTGlzdDxHb2FsPiwgTG9va0JhY2sgU3lzdGVtLlF1YW50aXR5KToKICBHb2FsTGlzdCBHCiAgICBsZXQgTG9va0JhY2tJbnRlcnZhbDogSW50ZXJ2YWxbTm93KCkgLSBMb29rQmFjaywgTm93KCldLAogICAgU3RhcnREYXRlOiAoRy5zdGFydCBhcyBGSElSLmRhdGUpLnZhbHVlLAogICAgU3RhdHVzRGF0ZTogRy5zdGF0dXNEYXRlLnZhbHVlLAogICAgVGFyZ2V0RGF0ZXM6IChHLnRhcmdldCkgVCByZXR1cm4gKFQuZHVlIGFzIEZISVIuZGF0ZSkudmFsdWUsCiAgICBUYXJnZXRRdWFudGl0aWVzOiAoRy50YXJnZXQpIFQgcmV0dXJuIEZISVJIZWxwZXJzLlRvUXVhbnRpdHkoVC5kdWUgYXMgRkhJUi5EdXJhdGlvbikKICAgIHdoZXJlIFN0YXJ0RGF0ZSBpbiBMb29rQmFja0ludGVydmFsCiAgICAgIG9yIFN0YXR1c0RhdGUgaW4gTG9va0JhY2tJbnRlcnZhbAogICAgICBvciBleGlzdHMoVGFyZ2V0RGF0ZXMgVEQgd2hlcmUgVEQgaW4gTG9va0JhY2tJbnRlcnZhbCkKICAgICAgb3IgZXhpc3RzKFRhcmdldFF1YW50aXRpZXMgVFEgd2hlcmUgKFN0YXJ0RGF0ZSArIFRRKSBpbiBMb29rQmFja0ludGVydmFsKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbW11bml6YXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qKgogICogRmlsdGVycyBJbW11bml6YXRpb25zIGJ5IGEgY29uY2VwdCByYXRoZXIgdGhhbiBieSBhIFZhbHVlU2V0LgogICogQHBhcmFtIEtvbmNlcHQgLSB0aGUgY29uY2VwdCB0byBmaWx0ZXIgb24gKGludGVudGlvbmFsbHkgbWlzcGVsbGVkIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzKQogICogQHJldHVybnMge0xpc3Q8SW1tdW5pemF0aW9uPn0gYSBsaXN0IG9mIEltbXVuaXphdGlvbnMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAgKi8KIGRlZmluZSBmdW5jdGlvbiBJbW11bml6YXRpb25zQnlDb25jZXB0KEtvbmNlcHQgU3lzdGVtLkNvbmNlcHQpOgogICBbSW1tdW5pemF0aW9uXSBJIHdoZXJlIEZISVJIZWxwZXJzLlRvQ29uY2VwdChJLnZhY2NpbmVDb2RlKSB+IEtvbmNlcHQKLyoqCiAqIEltbXVuaXphdGlvbnMgdGhhdCBhcmUgY29tcGxldGVkLiBJbiBGSElSIFI0LCB0aGlzIGlzIHJlZmxlY3RlZCBieSBzdGF0dXM6ICdjb21wbGV0ZWQnLgogKiBAc2VlIGh0dHA6Ly9obDcub3JnL2ZoaXIvUjQvdmFsdWVzZXQtaW1tdW5pemF0aW9uLXN0YXR1cy5odG1sCiAqIEBwYXJhbSBJbW11bml6YXRpb25MaXN0IC0gYSBsaXN0IG9mIEltbXVuaXphdGlvbnMKICogQHJldHVybnMge0xpc3Q8SW1tdW5pemF0aW9uPn0gYSBsaXN0IG9mIGNvbXBsZXRlZCBJbW11bml6YXRpb25zLCBvciBudWxsIGlmIG51bGwgd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIENvbXBsZXRlZEltbXVuaXphdGlvbihJbW11bml6YXRpb25MaXN0IExpc3Q8SW1tdW5pemF0aW9uPik6CiAgSW1tdW5pemF0aW9uTGlzdCBJCiAgICB3aGVyZSBJLnN0YXR1cy52YWx1ZSA9ICdjb21wbGV0ZWQnCi8qKgogKiBJbW11bml6YXRpb25zIGdpdmVuIGluIHRoZSBzcGVjaWZpZWQgImxvb2sgYmFjayIgcGVyaW9kLgogKiBUT0RPOiBSZW5hbWUgdG8gTG9va0JhY2sgb25jZSB0aGUgZXhlY3V0aW9uIGVuZ2luZSBzdXBwb3J0cyBvdmVybG9hZGVkIGZ1bmN0aW9ucy4KICogQHBhcmFtIEltbXVuaXphdGlvbkxpc3QgLSBhIGxpc3Qgb2YgSW1tdW5pemF0aW9ucwogKiBAcGFyYW0gTG9va0JhY2sgLSB0aGUgbG9va2JhY2sgcGVyaW9kIGZvciB3aGVuIHRoZSBpbW11bml6YXRpb24gd2FzIGdpdmVuCiAqIEByZXR1cm5zIHtMaXN0PEltbXVuaXphdGlvbj59IGEgbGlzdCBvZiBJbW11bml6YXRpb25zIGdpdmVuIGluIHRoZSBsb29rIGJhY2sgcGVyaW9kLCBvciBudWxsIGlmIG51bGwKICogd2FzIHBhc3NlZCBpbgogKi8KZGVmaW5lIGZ1bmN0aW9uIEltbXVuaXphdGlvbkxvb2tCYWNrKEltbXVuaXphdGlvbkxpc3QgTGlzdDxJbW11bml6YXRpb24+LCBMb29rQmFjayBTeXN0ZW0uUXVhbnRpdHkpOgogIEltbXVuaXphdGlvbkxpc3QgSQogICAgbGV0IExvb2tCYWNrSW50ZXJ2YWw6IEludGVydmFsW05vdygpIC0gTG9va0JhY2ssIE5vdygpXQogICAgd2hlcmUgKEkub2NjdXJyZW5jZSBhcyBGSElSLmRhdGVUaW1lKS52YWx1ZSBpbiBMb29rQmFja0ludGVydmFsCi8qKgogKiBUaGUgbW9zdCByZWNlbnQgSW1tdW5pemF0aW9uLgogKiBAcGFyYW0gSW1tdW5pemF0aW9uTGlzdCAtIGEgbGlzdCBvZiBJbW11bml6YXRpb25zCiAqIEByZXR1cm5zIHtJbW11bml6YXRpb259IHRoZSBtb3N0IHJlY2VudCBJbW11bml6YXRpb24gZnJvbSB0aGUgbGlzdCwgb3IgbnVsbCBpZiBudWxsIHdhcyBwYXNzZWQgaW4KICovCmRlZmluZSBmdW5jdGlvbiBNb3N0UmVjZW50SW1tdW5pemF0aW9uKEltbXVuaXphdGlvbkxpc3QgTGlzdDxJbW11bml6YXRpb24+KToKICBMYXN0KEltbXVuaXphdGlvbkxpc3QgSSBzb3J0IGJ5IChvY2N1cnJlbmNlIGFzIEZISVIuZGF0ZVRpbWUpLnZhbHVlKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZXZpY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qKgogICogRmlsdGVycyBEZXZpY2VzIGJ5IGEgY29uY2VwdCByYXRoZXIgdGhhbiBieSBhIFZhbHVlU2V0LgogICogQHBhcmFtIEtvbmNlcHQgLSB0aGUgY29uY2VwdCB0byBmaWx0ZXIgb24gKGludGVudGlvbmFsbHkgbWlzcGVsbGVkIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzKQogICogQHJldHVybnMge0xpc3Q8RGV2aWNlPn0gYSBsaXN0IG9mIERldmljZXMgbWF0Y2hpbmcgdGhlIGNvbmNlcHQsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAgKi8KIGRlZmluZSBmdW5jdGlvbiBEZXZpY2VzQnlDb25jZXB0KEtvbmNlcHQgU3lzdGVtLkNvbmNlcHQpOgogICBbRGV2aWNlXSBEIHdoZXJlIEZISVJIZWxwZXJzLlRvQ29uY2VwdChELnR5cGUpIH4gS29uY2VwdAovKioKICogRGV2aWNlcyB0aGF0IGFyZSBhY3RpdmUuIEluIEZISVIgUjQsIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IHN0YXR1czogJ2FjdGl2ZScuCiAqIEBzZWUgaHR0cDovL2hsNy5vcmcvZmhpci9SNC92YWx1ZXNldC1kZXZpY2Utc3RhdHVzLmh0bWwKICogQHBhcmFtIERldmljZUxpc3QgLSBhIGxpc3Qgb2YgRGV2aWNlcwogKiBAcmV0dXJucyB7TGlzdDxEZXZpY2U+fSBhIGxpc3Qgb2YgYWN0aXZlIERldmljZXMsIG9yIG51bGwgaWYgbnVsbCB3YXMgcGFzc2VkIGluCiAqLwpkZWZpbmUgZnVuY3Rpb24gQWN0aXZlRGV2aWNlKERldmljZUxpc3QgTGlzdDxEZXZpY2U+KToKICBEZXZpY2VMaXN0IEQKICAgIHdoZXJlIEQuc3RhdHVzLnZhbHVlID0gJ2FjdGl2ZSc=" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwidmVyc2lvbiI6IjEuMC4yIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJjb2RlU3lzdGVtcyI6eyJkZWYiOlt7Im5hbWUiOiJBSVZFUlNUQVRVUyIsImlkIjoiaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9hbGxlcmd5aW50b2xlcmFuY2UtdmVyaWZpY2F0aW9uIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJBSUNMSU5TVEFUVVMiLCJpZCI6Imh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vYWxsZXJneWludG9sZXJhbmNlLWNsaW5pY2FsIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJDT05EVkVSU1RBVFVTIiwiaWQiOiJodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi12ZXItc3RhdHVzIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJDT05EQ0xJTlNUQVRVUyIsImlkIjoiaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jb25kaXRpb24tY2xpbmljYWwiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6IkFsbGVyZ3lJbnRvbGVyYW5jZSBDb25maXJtZWQgY29kZSIsImlkIjoiY29uZmlybWVkIiwiZGlzcGxheSI6IkNvbmZpcm1lZCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiQUlWRVJTVEFUVVMifX0seyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlIEFjdGl2ZSBjb2RlIiwiaWQiOiJhY3RpdmUiLCJkaXNwbGF5IjoiQWN0aXZlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJBSUNMSU5TVEFUVVMifX0seyJuYW1lIjoiQ29uZGl0aW9uIENvbmZpcm1lZCBjb2RlIiwiaWQiOiJjb25maXJtZWQiLCJkaXNwbGF5IjoiQ29uZmlybWVkIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJDT05EVkVSU1RBVFVTIn19LHsibmFtZSI6IkNvbmRpdGlvbiBBY3RpdmUgY29kZSIsImlkIjoiYWN0aXZlIiwiZGlzcGxheSI6IkFjdGl2ZSIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiQ09ORENMSU5TVEFUVVMifX0seyJuYW1lIjoiQ29uZGl0aW9uIFJlY3VycmVuY2UgY29kZSIsImlkIjoicmVjdXJyZW5jZSIsImRpc3BsYXkiOiJSZWN1cnJlbmNlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJDT05EQ0xJTlNUQVRVUyJ9fSx7Im5hbWUiOiJDb25kaXRpb24gUmVsYXBzZSBjb2RlIiwiaWQiOiJyZWxhcHNlIiwiZGlzcGxheSI6IlJlbGFwc2UiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGVTeXN0ZW0iOnsibmFtZSI6IkNPTkRDTElOU1RBVFVTIn19XX0sImNvbmNlcHRzIjp7ImRlZiI6W3sibmFtZSI6IkFsbGVyZ3lJbnRvbGVyYW5jZSBDb25maXJtZWQiLCJkaXNwbGF5IjoiQ29uZmlybWVkIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlIjpbeyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlIENvbmZpcm1lZCBjb2RlIn1dfSx7Im5hbWUiOiJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIiwiZGlzcGxheSI6IkFjdGl2ZSIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZSI6W3sibmFtZSI6IkFsbGVyZ3lJbnRvbGVyYW5jZSBBY3RpdmUgY29kZSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIENvbmZpcm1lZCIsImRpc3BsYXkiOiJDb25maXJtZWQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGUiOlt7Im5hbWUiOiJDb25kaXRpb24gQ29uZmlybWVkIGNvZGUifV19LHsibmFtZSI6IkNvbmRpdGlvbiBBY3RpdmUiLCJkaXNwbGF5IjoiQWN0aXZlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlIjpbeyJuYW1lIjoiQ29uZGl0aW9uIEFjdGl2ZSBjb2RlIn1dfSx7Im5hbWUiOiJDb25kaXRpb24gUmVjdXJyZW5jZSIsImRpc3BsYXkiOiJSZWN1cnJlbmNlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlIjpbeyJuYW1lIjoiQ29uZGl0aW9uIFJlY3VycmVuY2UgY29kZSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIFJlbGFwc2UiLCJkaXNwbGF5IjoiUmVsYXBzZSIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZSI6W3sibmFtZSI6IkNvbmRpdGlvbiBSZWxhcHNlIGNvZGUifV19XX0sInN0YXRlbWVudHMiOnsiZGVmIjpbeyJuYW1lIjoiUGVyaW9kVG9JbnRlcnZhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsidHlwZSI6IkludGVydmFsVHlwZVNwZWNpZmllciIsInBvaW50VHlwZSI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LCJlbHNlIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InBlcmlvZCIsInR5cGUiOiJPcGVyYW5kUmVmIn19fSwiaGlnaCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJwZXJpb2QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlJhbmdlVG9JbnRlcnZhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoicmFuZ2UiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwidGhlbiI6eyJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn0sImFzVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiSW50ZXJ2YWxUeXBlU3BlY2lmaWVyIiwicG9pbnRUeXBlIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0sImVsc2UiOnsibG93Q2xvc2VkIjp0cnVlLCJoaWdoQ2xvc2VkIjp0cnVlLCJ0eXBlIjoiSW50ZXJ2YWwiLCJsb3ciOnsibmFtZSI6IlRvUXVhbnRpdHkiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImxvdyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoicmFuZ2UiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV19LCJoaWdoIjp7Im5hbWUiOiJUb1F1YW50aXR5IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJoaWdoIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJyYW5nZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6InJhbmdlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJhbmdlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik9ic2VydmF0aW9uc0J5Q29uY2VwdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJPIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJLb25jZXB0IiwidHlwZSI6Ik9wZXJhbmRSZWYifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IktvbmNlcHQiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlZlcmlmaWVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik8iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJPYnNMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImZpbmFsIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb3JyZWN0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImFtZW5kZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJXaXRoVW5pdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJPIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiT2JzTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1bml0IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX0seyJuYW1lIjoiVW5pdCIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSx7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInNjb3BlIjoiTyIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsibmFtZSI6IlVuaXQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiVW5pdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJPYnNlcnZhdGlvbkxvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik8iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJPYnNMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfSx7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJzY29wZSI6Ik8iLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX1dfSx7InR5cGUiOiJPdmVybGFwcyIsIm9wZXJhbmQiOlt7Im5hbWUiOiJQZXJpb2RUb0ludGVydmFsIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19XX0seyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6Imlzc3VlZCIsInNjb3BlIjoiTyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik9ic0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik1vc3RSZWNlbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGFzdCIsInNvdXJjZSI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTyIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik9ic0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sInNvcnQiOnsiYnkiOlt7ImRpcmVjdGlvbiI6ImFzYyIsInR5cGUiOiJCeUV4cHJlc3Npb24iLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoiZWZmZWN0aXZlIiwidHlwZSI6IklkZW50aWZpZXJSZWYifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoiZWZmZWN0aXZlIiwidHlwZSI6IklkZW50aWZpZXJSZWYifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Imlzc3VlZCIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn19XX19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik9ic0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlF1YW50aXR5VmFsdWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9RdWFudGl0eSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnMiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiQ29uY2VwdFZhbHVlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJvcGVyYW5kIjpbeyJuYW1lIjoiT2JzIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkZpbmREYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6ImVmZmVjdGl2ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9icyIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWluc3RhbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZW5kIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6ImVmZmVjdGl2ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGFydCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9icyIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiaXNzdWVkIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPYnMiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX1dfSwib3BlcmFuZCI6W3sibmFtZSI6Ik9icyIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJIaWdoZXN0T2JzZXJ2YXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTWF4Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJPIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiT2JzTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvUXVhbnRpdHkiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJzY29wZSI6Ik8iLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik9ic0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkNvbmRpdGlvbnNCeUNvbmNlcHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImNvZGUiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiS29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiQ29uZmlybWVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJDb25kTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2ZXJpZmljYXRpb25TdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IkNvbmRpdGlvbiBDb25maXJtZWQiLCJ0eXBlIjoiQ29uY2VwdFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiQ29uZExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJBY3RpdmVDb25kaXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiQW5kIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjbGluaWNhbFN0YXR1cyIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIEFjdGl2ZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfSx7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJhYmF0ZW1lbnQiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFjdGl2ZU9yUmVjdXJyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJDb25kTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjbGluaWNhbFN0YXR1cyIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIEFjdGl2ZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfSx7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY2xpbmljYWxTdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IkNvbmRpdGlvbiBSZWN1cnJlbmNlIiwidHlwZSI6IkNvbmNlcHRSZWYifV19XX0seyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImNsaW5pY2FsU3RhdHVzIiwic2NvcGUiOiJDIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJDb25kaXRpb24gUmVsYXBzZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfV19fSwib3BlcmFuZCI6W3sibmFtZSI6IkNvbmRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQ29uZGl0aW9uTG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoib25zZXQiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19LHsidHlwZSI6Ik92ZXJsYXBzIiwib3BlcmFuZCI6W3sibmFtZSI6IlBlcmlvZFRvSW50ZXJ2YWwiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJvbnNldCIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19LHsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWNvcmRlZERhdGUiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik1vc3RSZWNlbnRDb25kaXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGFzdCIsInNvdXJjZSI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJzb3J0Ijp7ImJ5IjpbeyJkaXJlY3Rpb24iOiJhc2MiLCJ0eXBlIjoiQnlFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29hbGVzY2UiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoib25zZXQiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJvbnNldCIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGFydCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJvbnNldCIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJyZWNvcmRlZERhdGUiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9fV19fV19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlByb2NlZHVyZXNCeUNvbmNlcHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUCIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImNvZGUiLCJzY29wZSI6IlAiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiS29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiQ29tcGxldGVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlAiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6IlAiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiY29tcGxldGVkIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiUHJvY2VkdXJlSW5Qcm9ncmVzcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJQIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUHJvY0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJQIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImluLXByb2dyZXNzIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiUHJvY2VkdXJlUGVyZm9ybWFuY2UiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUCIsImV4cHJlc3Npb24iOnsibmFtZSI6IlByb2NMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InByZXBhcmF0aW9uIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJub3QtZG9uZSIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiZW50ZXJlZC1pbi1lcnJvciIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoidW5rbm93biIsInR5cGUiOiJMaXRlcmFsIn1dfV19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJQcm9jTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlByb2NlZHVyZUxvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlAiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiTG9va0JhY2tJbnRlcnZhbCIsImV4cHJlc3Npb24iOnsibG93Q2xvc2VkIjp0cnVlLCJoaWdoQ2xvc2VkIjp0cnVlLCJ0eXBlIjoiSW50ZXJ2YWwiLCJsb3ciOnsidHlwZSI6IlN1YnRyYWN0Iiwib3BlcmFuZCI6W3sidHlwZSI6Ik5vdyJ9LHsibmFtZSI6Ikxvb2tCYWNrIiwidHlwZSI6Ik9wZXJhbmRSZWYifV19LCJoaWdoIjp7InR5cGUiOiJOb3cifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InBlcmZvcm1lZCIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX0seyJ0eXBlIjoiT3ZlcmxhcHMiLCJvcGVyYW5kIjpbeyJuYW1lIjoiUGVyaW9kVG9JbnRlcnZhbCIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InBlcmZvcm1lZCIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTW9zdFJlY2VudFByb2NlZHVyZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMYXN0Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJQIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUHJvY0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sInNvcnQiOnsiYnkiOlt7ImRpcmVjdGlvbiI6ImFzYyIsInR5cGUiOiJCeUV4cHJlc3Npb24iLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJwZXJmb3JtZWQiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJwZXJmb3JtZWQiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoicGVyZm9ybWVkIiwidHlwZSI6IklkZW50aWZpZXJSZWYifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX1dfX1dfX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiUHJvY0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvY2VkdXJlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdEFjdGl2ZU9yQ29tcGxldGVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdExpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJTIiwidHlwZSI6IlByb3BlcnR5In19LHsidHlwZSI6Ikxpc3QiLCJlbGVtZW50IjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiYWN0aXZlIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb21wbGV0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlNlcnZpY2VSZXF1ZXN0TG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUyIsImV4cHJlc3Npb24iOnsibmFtZSI6IlNlcnZpY2VSZXF1ZXN0TGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJhdXRob3JlZE9uIiwic2NvcGUiOiJTIiwidHlwZSI6IlByb3BlcnR5In19LHsibG93Q2xvc2VkIjp0cnVlLCJoaWdoQ2xvc2VkIjp0cnVlLCJ0eXBlIjoiSW50ZXJ2YWwiLCJsb3ciOnsidHlwZSI6IlN1YnRyYWN0Iiwib3BlcmFuZCI6W3sidHlwZSI6Ik5vdyJ9LHsibmFtZSI6Ikxvb2tCYWNrIiwidHlwZSI6Ik9wZXJhbmRSZWYifV19LCJoaWdoIjp7InR5cGUiOiJOb3cifX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik1lZGljYXRpb25TdGF0ZW1lbnRzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJtZWRpY2F0aW9uIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiS29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTWVkaWNhdGlvblJlcXVlc3RzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoibWVkaWNhdGlvbiIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJLb25jZXB0IiwidHlwZSI6Ik9wZXJhbmRSZWYifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IktvbmNlcHQiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkFjdGl2ZU1lZGljYXRpb25TdGF0ZW1lbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTSIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik1lZExpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6IkVmZmVjdGl2ZVBlcmlvZCIsImV4cHJlc3Npb24iOnsibmFtZSI6IlBlcmlvZFRvSW50ZXJ2YWwiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkFuZCIsIm9wZXJhbmQiOlt7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImFjdGl2ZSIsInR5cGUiOiJMaXRlcmFsIn1dfSx7InR5cGUiOiJPciIsIm9wZXJhbmQiOlt7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InR5cGUiOiJFbmQiLCJvcGVyYW5kIjp7Im5hbWUiOiJFZmZlY3RpdmVQZXJpb2QiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19LHsidHlwZSI6IkFmdGVyIiwib3BlcmFuZCI6W3sidHlwZSI6IkVuZCIsIm9wZXJhbmQiOnsibmFtZSI6IkVmZmVjdGl2ZVBlcmlvZCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fSx7InR5cGUiOiJOb3cifV19XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJNZWRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFjdGl2ZU1lZGljYXRpb25SZXF1ZXN0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWN0aXZlT3JDb21wbGV0ZWRNZWRpY2F0aW9uUmVxdWVzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJNIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiTWVkTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiYWN0aXZlIiwidHlwZSI6IkxpdGVyYWwifV19LHsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiY29tcGxldGVkIiwidHlwZSI6IkxpdGVyYWwifV19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWN0aXZlT3JDb21wbGV0ZWRNZWRpY2F0aW9uU3RhdGVtZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb21wbGV0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJNZWRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFjdGl2ZUNvbXBsZXRlZE9yU3RvcHBlZE1lZGljYXRpb25SZXF1ZXN0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb21wbGV0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfSx7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InN0b3BwZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJNZWRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJNZWRpY2F0aW9uUmVxdWVzdExvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImF1dGhvcmVkT24iLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTWVkaWNhdGlvblN0YXRlbWVudExvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfSx7InR5cGUiOiJPdmVybGFwcyIsIm9wZXJhbmQiOlt7Im5hbWUiOiJQZXJpb2RUb0ludGVydmFsIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2siLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJFbmNvdW50ZXJzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkUiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkV4aXN0cyIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkVUIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidHlwZSIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiRVQiLCJ0eXBlIjoiQWxpYXNSZWYifV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJLb25jZXB0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJJblByb2dyZXNzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkUiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJFbmNMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJpbi1wcm9ncmVzcyIsInR5cGUiOiJMaXRlcmFsIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJFbmNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlc0J5Q29uY2VwdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJBIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInNjb3BlIjoiQSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiS29uY2VwdCIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJLb25jZXB0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJBY3RpdmVPckNvbmZpcm1lZEFsbGVyZ3lJbnRvbGVyYW5jZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJBIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiQWxsZXJneUludG9sTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjbGluaWNhbFN0YXR1cyIsInNjb3BlIjoiQSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlIEFjdGl2ZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfSx7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmVyaWZpY2F0aW9uU3RhdHVzIiwic2NvcGUiOiJBIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJBbGxlcmd5SW50b2xlcmFuY2UgQ29uZmlybWVkIiwidHlwZSI6IkNvbmNlcHRSZWYifV19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiQWxsZXJneUludG9sTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkdvYWxMb29rQmFjayIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJHIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiR29hbExpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJleHByZXNzaW9uIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InR5cGUiOiJTdWJ0cmFjdCIsIm9wZXJhbmQiOlt7InR5cGUiOiJOb3cifSx7Im5hbWUiOiJMb29rQmFjayIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSwiaGlnaCI6eyJ0eXBlIjoiTm93In19fSx7ImlkZW50aWZpZXIiOiJTdGFydERhdGUiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJzdGFydCIsInNjb3BlIjoiRyIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX0seyJpZGVudGlmaWVyIjoiU3RhdHVzRGF0ZSIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXNEYXRlIiwic2NvcGUiOiJHIiwidHlwZSI6IlByb3BlcnR5In19fSx7ImlkZW50aWZpZXIiOiJUYXJnZXREYXRlcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlQiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ0YXJnZXQiLCJzY29wZSI6IkciLCJ0eXBlIjoiUHJvcGVydHkifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZHVlIiwic2NvcGUiOiJUIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fX19LHsiaWRlbnRpZmllciI6IlRhcmdldFF1YW50aXRpZXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJUIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidGFyZ2V0Iiwic2NvcGUiOiJHIiwidHlwZSI6IlByb3BlcnR5In19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvUXVhbnRpdHkiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZHVlIiwic2NvcGUiOiJUIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RHVyYXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX19fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJ0eXBlIjoiVG9EYXRlVGltZSIsIm9wZXJhbmQiOnsibmFtZSI6IlN0YXJ0RGF0ZSIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfSx7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJUb0RhdGVUaW1lIiwib3BlcmFuZCI6eyJuYW1lIjoiU3RhdHVzRGF0ZSIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19LHsidHlwZSI6IkV4aXN0cyIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlREIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVGFyZ2V0RGF0ZXMiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJ0eXBlIjoiVG9EYXRlVGltZSIsIm9wZXJhbmQiOnsibmFtZSI6IlREIiwidHlwZSI6IkFsaWFzUmVmIn19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19fX1dfSx7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJUUSIsImV4cHJlc3Npb24iOnsibmFtZSI6IlRhcmdldFF1YW50aXRpZXMiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJ0eXBlIjoiVG9EYXRlVGltZSIsIm9wZXJhbmQiOnsidHlwZSI6IkFkZCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJTdGFydERhdGUiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifSx7Im5hbWUiOiJUUSIsInR5cGUiOiJBbGlhc1JlZiJ9XX19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19fX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJHb2FsTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Hb2FsIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2siLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJJbW11bml6YXRpb25zQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkkiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1tdW5pemF0aW9uIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWNjaW5lQ29kZSIsInNjb3BlIjoiSSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiS29uY2VwdCIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJLb25jZXB0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJDb21wbGV0ZWRJbW11bml6YXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiSSIsImV4cHJlc3Npb24iOnsibmFtZSI6IkltbXVuaXphdGlvbkxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJJIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImNvbXBsZXRlZCIsInR5cGUiOiJMaXRlcmFsIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJJbW11bml6YXRpb25MaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiSW1tdW5pemF0aW9uTG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiSSIsImV4cHJlc3Npb24iOnsibmFtZSI6IkltbXVuaXphdGlvbkxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJleHByZXNzaW9uIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InR5cGUiOiJTdWJ0cmFjdCIsIm9wZXJhbmQiOlt7InR5cGUiOiJOb3cifSx7Im5hbWUiOiJMb29rQmFjayIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSwiaGlnaCI6eyJ0eXBlIjoiTm93In19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJvY2N1cnJlbmNlIiwic2NvcGUiOiJJIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJJbW11bml6YXRpb25MaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTW9zdFJlY2VudEltbXVuaXphdGlvbiIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMYXN0Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJJIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiSW1tdW5pemF0aW9uTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwic29ydCI6eyJieSI6W3siZGlyZWN0aW9uIjoiYXNjIiwidHlwZSI6IkJ5RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsibmFtZSI6Im9jY3VycmVuY2UiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6IkltbXVuaXphdGlvbkxpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1tdW5pemF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJEZXZpY2VzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkQiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ0eXBlIiwic2NvcGUiOiJEIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJLb25jZXB0IiwidHlwZSI6Ik9wZXJhbmRSZWYifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IktvbmNlcHQiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkFjdGl2ZURldmljZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJEIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiRGV2aWNlTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6IkQiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiYWN0aXZlIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IkRldmljZUxpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfV19fX0=" + } + ] + } \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json new file mode 100644 index 00000000..998d9ec3 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json @@ -0,0 +1,32 @@ +{ + "resourceType": "Library", + "id": "DTRHelpers", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicRulesetFunctions-prepopulation", + "name": "DTRHelpers", + "version": "0.1.0", + "title": "DTR Shared Functions", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBEVFJIZWxwZXJzIHZlcnNpb24gJzAuMS4wJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4wJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4wJyBjYWxsZWQgRkhJUkhlbHBlcnMKaW5jbHVkZSBDRFNfQ29ubmVjdF9Db21tb25zX2Zvcl9GSElSdjQwMCB2ZXJzaW9uICcxLjAuMicgY2FsbGVkIENEUwoKY29udGV4dCBQYXRpZW50CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDT05ESVRJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBSZXR1cm5zIGZvcm1hdHRlZCByZWx2YW50IGRpYWdub3NlcyBjb2RlcyBmcm9tIGEgbGlzdCBvZiBjb25kaXRpb25zCi8vIFVzZSBDYXNlOiBSZXRyaWV2ZSBEZXZpY2VSZXF1ZXN0IHJlbGV2YW50IGRpYWdub3NlcwpkZWZpbmUgZnVuY3Rpb24gQ29kZXNGcm9tQ29uZGl0aW9ucyhDb25kTGlzdCBMaXN0PENvbmRpdGlvbj4pOgogIGRpc3RpbmN0KGZsYXR0ZW4oCiAgICBDb25kTGlzdCBDCiAgICAgIGxldCBEaWFnbm9zZXNDb2RpbmdzOgogICAgICAgICAgKEMuY29kZS5jb2RpbmcpIENPRElORyB3aGVyZSBDT0RJTkcuc3lzdGVtLnZhbHVlIGluIHsKICAgICAgICAgICAgJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMCcsCiAgICAgICAgICAgICdodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20nLAogICAgICAgICAgICAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKQogICAgICByZXR1cm4gRGlhZ25vc2VzQ29kaW5ncwogICkpCgovLyBSZXR1cm5zIHRoZSBmaXJzdCBjaHJvbm9sb2dpY2FsbHkgcmVjb3JkZWQgY29uZGl0aW9uIG9mIGEgQ29uZGl0aW9uTGlzdAovLyBVc2UgQ2FzZTogQWNjZXNzIGVhcmxpZXJzdCBjb25kaXRpb24gZnJvbSBhIGxpc3QKZGVmaW5lIGZ1bmN0aW9uIEZpcnN0RGF0ZUNvbmRpdGlvblJlY29yZGVkKENvbmRpdGlvbkxpc3QgTGlzdDxGSElSLkNvbmRpdGlvbj4pOgogIEZpcnN0KENvbmRpdGlvbkxpc3QgQyBzb3J0IGJ5IEZISVJIZWxwZXJzLiJUb0RhdGVUaW1lIihyZWNvcmRlZERhdGUpKSAgCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPQlNFUlZBVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFJldHVybnMgdGhlIE9ic2VydmF0aW9uIHdpdGggdGhlIGxvd2VzdCB2YWx1ZSBmcm9tIGFuIE9ic2VydmF0aW9uTGlzdAovLyBVc2UgQ2FzZTogRmluZGluZyB0aGUgbG93ZXN0IG51bWVyaWNhbCBsYWIgcmVzdWx0CmRlZmluZSBmdW5jdGlvbiBMb3dlc3RPYnNlcnZhdGlvbihPYnNMaXN0IExpc3Q8T2JzZXJ2YXRpb24+KToKICBNaW4oT2JzTGlzdCBPIHJldHVybiBGSElSSGVscGVycy5Ub1F1YW50aXR5KE8udmFsdWUgYXMgUXVhbnRpdHkpKQoKLy8gUmV0dXJucyB0aGUgbnVtZXJpY2FsIHZhbHVlIG9mIGFuIE9ic2VydmF0aW9uLCB3aXRob3V0IGEgdW5pdAovLyBVc2UgQ2FzZTogRGlzcGxheWluZyBvbmx5IHRoZSBudW1lcmljYWwgcGFydCBvZiBhIGxhYiByZXN1bHQKZGVmaW5lIGZ1bmN0aW9uIEdldE9ic2VydmF0aW9uVmFsdWUoT2JzIE9ic2VydmF0aW9uKTogCiAgTnVsbFNhZmVUb1F1YW50aXR5V2l0aG91dFVuaXQoY2FzdCBPYnMudmFsdWUgYXMgUXVhbnRpdHkpCgovLyBSZXRyaWV2ZSB0aGUgbnVtZXJpY2FsIHZhbHVlIG9mIGEgRkhJUiBxdWFudGl0eSwgd2l0aG91dCB1bml0cwovLyBVc2UgQ2FzZTogSGVscGVyIGZ1bmN0aW9uIGZvciBHZXRPYnNlcnZhdGlvblZhbHVlKCkgCmRlZmluZSBmdW5jdGlvbiBOdWxsU2FmZVRvUXVhbnRpdHlXaXRob3V0VW5pdChRdHkgRkhJUi5RdWFudGl0eSk6CiAgaWYgUXR5IGlzIG5vdCBudWxsIHRoZW4gUXR5LnZhbHVlLnZhbHVlIAogIGVsc2UgbnVsbAoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5DT1VOVEVSUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gVGFrZXMgaW4gYSBsaXN0IG9mIGVuY291bnRlcnMgYW5kIGEgbG9va2JhY2sgcGVyaW9kLCBhbmQgcmV0dXJucyBhIHN1YnNldCBvZiB0aGF0IGxpc3QgY29udGFpbmluZyBlbmNvdW50ZXJzIG9jY3VyaW5nIGR1cmluZyB0aGF0IGxvb2tiYWNrIHBlcmlvZC4KLy8gVXNlIENhc2U6IFJldHJpZXZlIGVuY291bnRlcnMgdGhhdCBvY2N1ciBkdXJpbmcgYSByZWNlbnQgdGltZSBwZXJpb2QKZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlckxvb2tCYWNrKEVuY291bnRlckxpc3QgTGlzdDxFbmNvdW50ZXI+LCBMb29rQmFjayBTeXN0ZW0uUXVhbnRpdHkpOgogIEVuY291bnRlckxpc3QgRQogICAgbGV0IExvb2tCYWNrSW50ZXJ2YWw6IEludGVydmFsW05vdygpIC0gTG9va0JhY2ssIE5vdygpXQogICAgd2hlcmUgKGNhc3QgRS5wZXJpb2Quc3RhcnQgYXMgZGF0ZVRpbWUpLnZhbHVlIGluIExvb2tCYWNrSW50ZXJ2YWwKICAgICAgb3IgQ0RTLlBlcmlvZFRvSW50ZXJ2YWwoY2FzdCBFLnBlcmlvZCBhcyBQZXJpb2QpIG92ZXJsYXBzIExvb2tCYWNrSW50ZXJ2YWwKCi8vIFJldHVybnMgZm9ybWF0dGVkIGNvZGluZ3MgZnJvbSBhIGxpc3Qgb2YgRW5jb3VudGVycwovLyBVc2UgQ2FzZTogUXVlcnkgcmVsZXZhbnQgRW5jb3VudGVycwpkZWZpbmUgZnVuY3Rpb24gQ29udmVydEVuY291bnRlckRldGFpbHMoRW5jb3VudGVyTGlzdCBMaXN0PEVuY291bnRlcj4pOgogIGRpc3RpbmN0KAogICAgZmxhdHRlbigKICAgICAgRW5jb3VudGVyTGlzdCBFCiAgICAgICAgbGV0IEVuY291bnRlckNvZGluZ3M6CiAgICAgICAgICAoRS50eXBlLmNvZGluZykgQ09ESU5HCiAgICAgICAgICByZXR1cm4gVHVwbGUgewogICAgICAgICAgICBjb2RlOiBDT0RJTkcuY29kZS52YWx1ZSwKICAgICAgICAgICAgc3lzdGVtOiBDT0RJTkcuc3lzdGVtLnZhbHVlLAogICAgICAgICAgICBkaXNwbGF5OiBDT0RJTkcuZGlzcGxheS52YWx1ZSwKICAgICAgICAgICAgcGVyaW9kU3RhcnQ6IEUucGVyaW9kLnN0YXJ0LnZhbHVlLAogICAgICAgICAgICBlbmNvdW50ZXJSZWFzb246IEUucmVhc29uQ29kZVswXS5jb2RpbmcuZGlzcGxheS52YWx1ZSwKICAgICAgICAgICAgdHlwZTogJ2VuY291bnRlcicKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gRW5jb3VudGVyQ29kaW5ncwogICAgKQogICkKCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJPQ0VEVVJFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBSZXR1cm5zIGZvcm1hdHRlZCBjb2RpbmdzIGZyb20gYSBsaXN0IG9mIFByb2NlZHVyZXMKLy8gVXNlIENhc2U6IFF1ZXJ5IHJlbGV2YW50IHByb2NlZHVyZXMgZm9yIGEgTWVkaWNhdGlvblJlcXVlc3QKZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZUNvZGluZyhQcm9jZWR1cmVMaXN0IExpc3Q8RkhJUi5Qcm9jZWR1cmU+KToKICBkaXN0aW5jdCgKICAgIGZsYXR0ZW4oCiAgICAgIFByb2NlZHVyZUxpc3QgUAogICAgICAgIGxldCBEaWFnbm9zZXNDb2RpbmdzOgogICAgICAgICAgKFAuY29kZS5jb2RpbmcpIENPRElORyAKICAgICAgICAgIHJldHVybiBUdXBsZSB7CiAgICAgICAgICAgIGNvZGU6IENPRElORy5jb2RlLnZhbHVlLAogICAgICAgICAgICBzeXN0ZW06IENPRElORy5zeXN0ZW0udmFsdWUsCiAgICAgICAgICAgIGRpc3BsYXk6IENPRElORy5kaXNwbGF5LnZhbHVlCiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIERpYWdub3Nlc0NvZGluZ3MKICAgICkKICApCgovLyBSZXR1cm5zIGZvcm1hdHRlZCBjb2RpbmdzIGZyb20gYSBsaXN0IG9mIFByb2NlZHVyZXMKLy8gVXNlIENhc2U6IFF1ZXJ5IHJlbGV2YW50IHByb2NlZHVyZXMgZm9yIGEgTWVkaWNhdGlvblJlcXVlc3QKICBkZWZpbmUgZnVuY3Rpb24gQ29kZXNGcm9tUHJvY2VkdXJlcyhQcm9jZWR1cmVMaXN0IExpc3Q8RkhJUi5Qcm9jZWR1cmU+KToKICAgIGRpc3RpbmN0KGZsYXR0ZW4oCiAgICAgIFByb2NlZHVyZUxpc3QgUAogICAgICAgIGxldCBEaWFnbm9zZXNDb2RpbmdzOgogICAgICAgICAgICAoUC5jb2RlLmNvZGluZykgQ09ESU5HIHdoZXJlIENPRElORy5zeXN0ZW0udmFsdWUgaW4gewogICAgICAgICAgICAgICdodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAnLAogICAgICAgICAgICAgICdodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20nLAogICAgICAgICAgICAgICdodHRwOi8vc25vbWVkLmluZm8vc2N0JwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKQogICAgICAgIHJldHVybiBEaWFnbm9zZXNDb2RpbmdzCiAgKSk=" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiRFRSSGVscGVycyIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjQsInN0YXJ0Q2hhciI6MSwiZW5kTGluZSI6NCwiZW5kQ2hhciI6NjcsIm1lc3NhZ2UiOiJDb3VsZCBub3QgbG9hZCBzb3VyY2UgZm9yIGxpYnJhcnkgQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAuIiwiZXJyb3JUeXBlIjoiaW5jbHVkZSIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInRhcmdldEluY2x1ZGVMaWJyYXJ5SWQiOiJDRFNfQ29ubmVjdF9Db21tb25zX2Zvcl9GSElSdjQwMCIsInRhcmdldEluY2x1ZGVMaWJyYXJ5VmVyc2lvbklkIjoiMS4wLjIiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiRFRSSGVscGVycyIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjU2LCJzdGFydENoYXIiOjEwLCJlbmRMaW5lIjo1NiwiZW5kQ2hhciI6MTIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIENEUyBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifV0sImlkZW50aWZpZXIiOnsiaWQiOiJEVFJIZWxwZXJzIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IkNvZGVzRnJvbUNvbmRpdGlvbnMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRGlzdGluY3QiLCJvcGVyYW5kIjp7InR5cGUiOiJGbGF0dGVuIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJEaWFnbm9zZXNDb2RpbmdzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQ09ESU5HIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJDIiwidHlwZSI6IlByb3BlcnR5In19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJDT0RJTkciLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAiLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbSIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsInR5cGUiOiJMaXRlcmFsIn1dfV19LCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IkRpYWdub3Nlc0NvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkZpcnN0RGF0ZUNvbmRpdGlvblJlY29yZGVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkZpcnN0Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiQ29uZGl0aW9uTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwic29ydCI6eyJieSI6W3siZGlyZWN0aW9uIjoiYXNjIiwidHlwZSI6IkJ5RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iOnsibmFtZSI6IlRvRGF0ZVRpbWUiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6InJlY29yZGVkRGF0ZSIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn1dfX1dfX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiQ29uZGl0aW9uTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6Ikxvd2VzdE9ic2VydmF0aW9uIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik1pbiIsInNvdXJjZSI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTyIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik9ic0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJUb1F1YW50aXR5IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJOdWxsU2FmZVRvUXVhbnRpdHlXaXRob3V0VW5pdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoiUXR5IiwidHlwZSI6Ik9wZXJhbmRSZWYifX19LCJ0aGVuIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlF0eSIsInR5cGUiOiJPcGVyYW5kUmVmIn19fSwiZWxzZSI6eyJhc1R5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURlY2ltYWwiLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fSwib3BlcmFuZCI6W3sibmFtZSI6IlF0eSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJHZXRPYnNlcnZhdGlvblZhbHVlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik51bGxTYWZlVG9RdWFudGl0eVdpdGhvdXRVbml0IiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0Ijp0cnVlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnMiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiRW5jb3VudGVyTG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiRSIsImV4cHJlc3Npb24iOnsibmFtZSI6IkVuY291bnRlckxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJleHByZXNzaW9uIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InR5cGUiOiJTdWJ0cmFjdCIsIm9wZXJhbmQiOlt7InR5cGUiOiJOb3cifSx7Im5hbWUiOiJMb29rQmFjayIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSwiaGlnaCI6eyJ0eXBlIjoiTm93In19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJOdWxsIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoiRW5jb3VudGVyTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkNvbnZlcnRFbmNvdW50ZXJEZXRhaWxzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkUiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJFbmNvdW50ZXJMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJFbmNvdW50ZXJDb2RpbmdzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQ09ESU5HIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidHlwZSIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsidHlwZSI6IlR1cGxlIiwiZWxlbWVudCI6W3sibmFtZSI6ImNvZGUiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX0seyJuYW1lIjoic3lzdGVtIiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX0seyJuYW1lIjoiZGlzcGxheSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZGlzcGxheSIsInNjb3BlIjoiQ09ESU5HIiwidHlwZSI6IlByb3BlcnR5In19fSx7Im5hbWUiOiJwZXJpb2RTdGFydCIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmlvZCIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fX19LHsibmFtZSI6ImVuY291bnRlclJlYXNvbiIsInZhbHVlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InJlYXNvbkNvZGUiLCJzY29wZSI6IkUiLCJ0eXBlIjoiUHJvcGVydHkifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn1dfX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6ImRpc3BsYXkiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImRpc3BsYXkiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX0seyJuYW1lIjoidHlwZSIsInZhbHVlIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJlbmNvdW50ZXIiLCJ0eXBlIjoiTGl0ZXJhbCJ9fV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IkVuY291bnRlckNvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJFbmNvdW50ZXJMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiUHJvY2VkdXJlQ29kaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlAiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jZWR1cmVMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJEaWFnbm9zZXNDb2RpbmdzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQ09ESU5HIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJQIiwidHlwZSI6IlByb3BlcnR5In19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7InR5cGUiOiJUdXBsZSIsImVsZW1lbnQiOlt7Im5hbWUiOiJjb2RlIiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJDT0RJTkciLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6InN5c3RlbSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJDT0RJTkciLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6ImRpc3BsYXkiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImRpc3BsYXkiLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJEaWFnbm9zZXNDb2RpbmdzIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn19fX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiUHJvY2VkdXJlTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkNvZGVzRnJvbVByb2NlZHVyZXMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRGlzdGluY3QiLCJvcGVyYW5kIjp7InR5cGUiOiJGbGF0dGVuIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUCIsImV4cHJlc3Npb24iOnsibmFtZSI6IlByb2NlZHVyZUxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6IkRpYWdub3Nlc0NvZGluZ3MiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDT0RJTkciLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJzY29wZSI6IlAiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMCIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwidHlwZSI6IkxpdGVyYWwifV19XX0sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJUb0NvZGUiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6IkNPRElORyIsInR5cGUiOiJBbGlhc1JlZiJ9XX19fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiRGlhZ25vc2VzQ29kaW5ncyIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fX19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NlZHVyZUxpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvY2VkdXJlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfV19fX0=" + } + ] + } \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json new file mode 100644 index 00000000..6bea7b78 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json @@ -0,0 +1,25 @@ +{ + "resourceType": "Library", + "id": "FHIRHelpers-4.0.0", + "name": "FHIRHelpers-4.0.0", + "version": "4.0.0", + "title": "FHIR Helpers", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcKCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCgpkZWZpbmUgZnVuY3Rpb24gVG9JbnRlcnZhbChwZXJpb2QgRkhJUi5QZXJpb2QpOgogICAgaWYgcGVyaW9kIGlzIG51bGwgdGhlbgogICAgICAgIG51bGwKICAgIGVsc2UKICAgICAgICBJbnRlcnZhbFtwZXJpb2QuInN0YXJ0Ii52YWx1ZSwgcGVyaW9kLiJlbmQiLnZhbHVlXQoKZGVmaW5lIGZ1bmN0aW9uIFRvUXVhbnRpdHkocXVhbnRpdHkgRkhJUi5RdWFudGl0eSk6CiAgICBpZiBxdWFudGl0eSBpcyBudWxsIHRoZW4KICAgICAgICBudWxsCiAgICBlbHNlCiAgICAgICAgU3lzdGVtLlF1YW50aXR5IHsgdmFsdWU6IHF1YW50aXR5LnZhbHVlLnZhbHVlLCB1bml0OiBxdWFudGl0eS51bml0LnZhbHVlIH0KCmRlZmluZSBmdW5jdGlvbiBUb0ludGVydmFsKHJhbmdlIEZISVIuUmFuZ2UpOgogICAgaWYgcmFuZ2UgaXMgbnVsbCB0aGVuCiAgICAgICAgbnVsbAogICAgZWxzZQogICAgICAgIEludGVydmFsW1RvUXVhbnRpdHkocmFuZ2UubG93KSwgVG9RdWFudGl0eShyYW5nZS5oaWdoKV0KCmRlZmluZSBmdW5jdGlvbiBUb0NvZGUoY29kaW5nIEZISVIuQ29kaW5nKToKICAgIGlmIGNvZGluZyBpcyBudWxsIHRoZW4KICAgICAgICBudWxsCiAgICBlbHNlCiAgICAgICAgU3lzdGVtLkNvZGUgewogICAgICAgICAgY29kZTogY29kaW5nLmNvZGUudmFsdWUsCiAgICAgICAgICBzeXN0ZW06IGNvZGluZy5zeXN0ZW0udmFsdWUsCiAgICAgICAgICB2ZXJzaW9uOiBjb2RpbmcudmVyc2lvbi52YWx1ZSwKICAgICAgICAgIGRpc3BsYXk6IGNvZGluZy5kaXNwbGF5LnZhbHVlCiAgICAgICAgfQoKZGVmaW5lIGZ1bmN0aW9uIFRvQ29uY2VwdChjb25jZXB0IEZISVIuQ29kZWFibGVDb25jZXB0KToKICAgIGlmIGNvbmNlcHQgaXMgbnVsbCB0aGVuCiAgICAgICAgbnVsbAogICAgZWxzZQogICAgICAgIFN5c3RlbS5Db25jZXB0IHsKICAgICAgICAgICAgY29kZXM6IGNvbmNlcHQuY29kaW5nIEMgcmV0dXJuIFRvQ29kZShDKSwKICAgICAgICAgICAgZGlzcGxheTogY29uY2VwdC50ZXh0LnZhbHVlCiAgICAgICAgfQoKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIudXVpZCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlRlc3RTY3JpcHRSZXF1ZXN0TWV0aG9kQ29kZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNvcnREaXJlY3Rpb24pOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5CaW9sb2dpY2FsbHlEZXJpdmVkUHJvZHVjdFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlVuaXRzT2ZUaW1lKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWRkcmVzc1R5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BbGxlcmd5SW50b2xlcmFuY2VDYXRlZ29yeSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLklzc3VlU2V2ZXJpdHkpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5DYXJlVGVhbVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVuY291bnRlclN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN0cnVjdHVyZURlZmluaXRpb25LaW5kKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHVibGljYXRpb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5GSElSVmVyc2lvbik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNhcmVQbGFuQWN0aXZpdHlLaW5kKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3RydWN0dXJlTWFwU291cmNlTGlzdE1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZXF1ZXN0U3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuc3RyYW5kVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlF1ZXN0aW9ubmFpcmVSZXNwb25zZVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNlYXJjaENvbXBhcmF0b3IpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5DaGFyZ2VJdGVtU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWN0aW9uUGFydGljaXBhbnRUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWxsZXJneUludG9sZXJhbmNlVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNhcmVQbGFuQWN0aXZpdHlTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5JbnZvaWNlU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ2xhaW1Qcm9jZXNzaW5nQ29kZXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZXF1ZXN0UmVzb3VyY2VUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUGFydGljaXBhdGlvblN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU5hbWVUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRG9jdW1lbnRNb2RlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQXNzZXJ0aW9uT3BlcmF0b3JUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGF5c09mV2Vlayk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLklzc3VlVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLmNhbm9uaWNhbCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN0cnVjdHVyZU1hcENvbnRleHRUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRmFtaWx5SGlzdG9yeVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLnN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkV4dGVuc2lvbkNvbnRleHRUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQXNzZXJ0aW9uUmVzcG9uc2VUeXBlcyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlcXVlc3RJbnRlbnQpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5zdHJpbmcpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BY3Rpb25SZXF1aXJlZEJlaGF2aW9yKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuR3JhcGhDb21wYXJ0bWVudFVzZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLm9yaWVudGF0aW9uVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFjY291bnRTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5JZGVudGlmaWVyVXNlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3RydWN0dXJlTWFwVGFyZ2V0TGlzdE1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5FeHBvc3VyZVN0YXRlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVGVzdFJlcG9ydFBhcnRpY2lwYW50VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkJpbmRpbmdTdHJlbmd0aCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlcXVlc3RQcmlvcml0eSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlBhcnRpY2lwYW50UmVxdWlyZWQpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5YUGF0aFVzYWdlVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLmlkKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRmlsdGVyT3BlcmF0b3IpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5OYW1pbmdTeXN0ZW1UeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29udHJhY3RSZXNvdXJjZVN0YXR1c0NvZGVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVzZWFyY2hTdWJqZWN0U3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3RydWN0dXJlTWFwVHJhbnNmb3JtKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVzcG9uc2VUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvRGVjaW1hbCh2YWx1ZSBGSElSLmRlY2ltYWwpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BZ2dyZWdhdGlvbk1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5zZXF1ZW5jZVR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TeXN0ZW1SZXN0ZnVsSW50ZXJhY3Rpb24pOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BZHZlcnNlRXZlbnRBY3R1YWxpdHkpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TdWJzY3JpcHRpb25DaGFubmVsVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFzc2VydGlvbkRpcmVjdGlvblR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5DYXJlUGxhbkludGVudCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFsbGVyZ3lJbnRvbGVyYW5jZUNyaXRpY2FsaXR5KTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHJvcGVydHlSZXByZXNlbnRhdGlvbik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlRyaWdnZXJUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29tcG9zaXRpb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BcHBvaW50bWVudFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk1lc3NhZ2VTaWduaWZpY2FuY2VDYXRlZ29yeSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkxpc3RNb2RlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVzZWFyY2hFbGVtZW50VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk9ic2VydmF0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVzb3VyY2VUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvQm9vbGVhbih2YWx1ZSBGSElSLmJvb2xlYW4pOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TdHJ1Y3R1cmVNYXBHcm91cFR5cGVNb2RlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3VwcGx5UmVxdWVzdFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVuY291bnRlckxvY2F0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uZGl0aW9uYWxEZWxldGVTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi51cmwpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi51cmkpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Vc2UpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWRpY2F0aW9uUmVxdWVzdFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLklkZW50aXR5QXNzdXJhbmNlTGV2ZWwpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5EZXZpY2VNZXRyaWNDb2xvcik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1RpbWUodmFsdWUgRkhJUi50aW1lKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uZGl0aW9uYWxSZWFkU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWxsZXJneUludG9sZXJhbmNlU2V2ZXJpdHkpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5GaW5hbmNpYWxSZXNvdXJjZVN0YXR1c0NvZGVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuT3BlcmF0aW9uS2luZCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN1YnNjcmlwdGlvblN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkdvYWxMaWZlY3ljbGVTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5PYnNlcnZhdGlvbkRhdGFUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRG9jdW1lbnRSZWZlcmVuY2VTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5yZXBvc2l0b3J5VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkxvY2F0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTm90ZVR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5UZXN0UmVwb3J0U3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29kZVN5c3RlbUNvbnRlbnRNb2RlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRkhJUkRldmljZVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbnRhY3RQb2ludFN5c3RlbSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNsb3RTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Qcm9wZXJ0eVR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5UeXBlRGVyaXZhdGlvblJ1bGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5HdWlkYW5jZVJlc3BvbnNlU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVsYXRlZEFydGlmYWN0VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLm9pZCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbXBhcnRtZW50VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk1lZGljYXRpb25SZXF1ZXN0SW50ZW50KTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuSW52b2ljZVByaWNlQ29tcG9uZW50VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU1ldHJpY0NhbGlicmF0aW9uU3RhdGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Hcm91cFR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5FbmFibGVXaGVuQmVoYXZpb3IpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5UYXNrSW50ZW50KTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuSW1tdW5pemF0aW9uRXZhbHVhdGlvblN0YXR1c0NvZGVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRXhhbXBsZVNjZW5hcmlvQWN0b3JUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHJvdmVuYW5jZUVudGl0eVJvbGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TcGVjaW1lblN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlc3RmdWxDYXBhYmlsaXR5TW9kZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldGVjdGVkSXNzdWVTZXZlcml0eSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlZpc2lvbkV5ZXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db25zZW50RGF0YU1lYW5pbmcpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5tZXNzYWdlaGVhZGVyUmVzcG9uc2VSZXF1ZXN0KTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuR3VpZGVQYWdlR2VuZXJhdGlvbik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRvY3VtZW50UmVsYXRpb25zaGlwVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlZhcmlhYmxlVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlRlc3RSZXBvcnRSZXN1bHQpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db25jZXB0TWFwR3JvdXBVbm1hcHBlZE1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9EYXRlVGltZSh2YWx1ZSBGSElSLmluc3RhbnQpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9EYXRlVGltZSh2YWx1ZSBGSElSLmRhdGVUaW1lKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvRGF0ZSh2YWx1ZSBGSElSLmRhdGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlIEZISVIucG9zaXRpdmVJbnQpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5DbGluaWNhbEltcHJlc3Npb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5FbGlnaWJpbGl0eVJlc3BvbnNlUHVycG9zZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk5hcnJhdGl2ZVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkltYWdpbmdTdHVkeVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVuZHBvaW50U3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQmlvbG9naWNhbGx5RGVyaXZlZFByb2R1Y3RDYXRlZ29yeSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlc291cmNlVmVyc2lvblBvbGljeSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFjdGlvbkNhcmRpbmFsaXR5QmVoYXZpb3IpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Hcm91cE1lYXN1cmUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5OYW1pbmdTeXN0ZW1JZGVudGlmaWVyVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkltbXVuaXphdGlvblN0YXR1c0NvZGVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVkaWNhdGlvblN0YXR1c0NvZGVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGlzY3JpbWluYXRvclR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TdHJ1Y3R1cmVNYXBJbnB1dE1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5MaW5rYWdlVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlZmVyZW5jZUhhbmRsaW5nUG9saWN5KTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVzZWFyY2hTdHVkeVN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkF1ZGl0RXZlbnRPdXRjb21lKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3BlY2ltZW5Db250YWluZWRQcmVmZXJlbmNlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWN0aW9uUmVsYXRpb25zaGlwVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbnN0cmFpbnRTZXZlcml0eSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkV2ZW50Q2FwYWJpbGl0eU1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db2RlU2VhcmNoU3VwcG9ydCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk9ic2VydmF0aW9uUmFuZ2VDYXRlZ29yeSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlVESUVudHJ5VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU1ldHJpY0NhdGVnb3J5KTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVGVzdFJlcG9ydEFjdGlvblJlc3VsdCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNhcGFiaWxpdHlTdGF0ZW1lbnRLaW5kKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRXZlbnRUaW1pbmcpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TZWFyY2hQYXJhbVR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BY3Rpb25Hcm91cGluZ0JlaGF2aW9yKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3RydWN0dXJlTWFwTW9kZWxNb2RlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVGFza1N0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkJpb2xvZ2ljYWxseURlcml2ZWRQcm9kdWN0U3RvcmFnZVNjYWxlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuR3JhcGhDb21wYXJ0bWVudFJ1bGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TbGljaW5nUnVsZXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5FeHBsYW5hdGlvbk9mQmVuZWZpdFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkd1aWRlUGFyYW1ldGVyQ29kZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNhdGFsb2dFbnRyeVJlbGF0aW9uVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkxpbmtUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uY2VwdE1hcEVxdWl2YWxlbmNlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQXVkaXRFdmVudEFjdGlvbik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNlYXJjaE1vZGlmaWVyQ29kZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkV2ZW50U3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuT3BlcmF0aW9uUGFyYW1ldGVyVXNlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uc2VudFByb3Zpc2lvblR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BY3Rpb25Db25kaXRpb25LaW5kKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIucXVhbGl0eVR5cGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BZG1pbmlzdHJhdGl2ZUdlbmRlcik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlF1ZXN0aW9ubmFpcmVJdGVtVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU1ldHJpY0NhbGlicmF0aW9uVHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkV2aWRlbmNlVmFyaWFibGVUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuY29kZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFjdGlvblNlbGVjdGlvbkJlaGF2aW9yKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3VwcGx5RGVsaXZlcnlTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5EaWFnbm9zdGljUmVwb3J0U3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRmxhZ1N0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNQRFhMaWNlbnNlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTGlzdFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLmJhc2U2NEJpbmFyeSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZVVzZVN0YXRlbWVudFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkF1ZGl0RXZlbnRBZ2VudE5ldHdvcmtUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRXhwcmVzc2lvbkxhbmd1YWdlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWRkcmVzc1VzZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbnRhY3RQb2ludFVzZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU1ldHJpY09wZXJhdGlvbmFsU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29udHJpYnV0b3JUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVmZXJlbmNlVmVyc2lvblJ1bGVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVhc3VyZVJlcG9ydFN0YXR1cyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNlYXJjaEVudHJ5TW9kZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUgRkhJUi51bnNpZ25lZEludCk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk5hbWVVc2UpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Mb2NhdGlvbk1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlIEZISVIuaW50ZWdlcik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkZISVJTdWJzdGFuY2VTdGF0dXMpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5RdWVzdGlvbm5haXJlSXRlbU9wZXJhdG9yKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuSFRUUFZlcmIpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5FcGlzb2RlT2ZDYXJlU3RhdHVzKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVtaXR0YW5jZU91dGNvbWUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5tYXJrZG93bik6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVsaWdpYmlsaXR5UmVxdWVzdFB1cnBvc2UpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5RdWFudGl0eUNvbXBhcmF0b3IpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWFzdXJlUmVwb3J0VHlwZSk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFjdGlvblByZWNoZWNrQmVoYXZpb3IpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TYW1wbGVkRGF0YURhdGFUeXBlKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29tcG9zaXRpb25BdHRlc3RhdGlvbk1vZGUpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5UeXBlUmVzdGZ1bEludGVyYWN0aW9uKTogdmFsdWUudmFsdWUKZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29kZVN5c3RlbUhpZXJhcmNoeU1lYW5pbmcpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi52Q29uZmlkZW50aWFsaXR5Q2xhc3NpZmljYXRpb24pOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db250cmFjdFJlc291cmNlUHVibGljYXRpb25TdGF0dXNDb2Rlcyk6IHZhbHVlLnZhbHVlCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlZpc2lvbkJhc2UpOiB2YWx1ZS52YWx1ZQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5CdW5kbGVUeXBlKTogdmFsdWUudmFsdWUKCg==" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkZISVJIZWxwZXJzIiwidmVyc2lvbiI6IjQuMC4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInN0YXRlbWVudHMiOnsiZGVmIjpbeyJuYW1lIjoiVG9JbnRlcnZhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsidHlwZSI6IkludGVydmFsVHlwZVNwZWNpZmllciIsInBvaW50VHlwZSI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LCJlbHNlIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InBlcmlvZCIsInR5cGUiOiJPcGVyYW5kUmVmIn19fSwiaGlnaCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJwZXJpb2QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvUXVhbnRpdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiSWYiLCJjb25kaXRpb24iOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsibmFtZSI6InF1YW50aXR5IiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsidHlwZSI6Ik51bGwifX0sImVsc2UiOnsiY2xhc3NUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJJbnN0YW5jZSIsImVsZW1lbnQiOlt7Im5hbWUiOiJ2YWx1ZSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InF1YW50aXR5IiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fSx7Im5hbWUiOiJ1bml0IiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1bml0IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJxdWFudGl0eSIsInR5cGUiOiJPcGVyYW5kUmVmIn19fX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJxdWFudGl0eSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0ludGVydmFsIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7Im5hbWUiOiJyYW5nZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJ0aGVuIjp7InR5cGUiOiJBcyIsIm9wZXJhbmQiOnsidHlwZSI6Ik51bGwifSwiYXNUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJJbnRlcnZhbFR5cGVTcGVjaWZpZXIiLCJwb2ludFR5cGUiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSwiZWxzZSI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJuYW1lIjoiVG9RdWFudGl0eSIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJsb3ciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InJhbmdlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dfSwiaGlnaCI6eyJuYW1lIjoiVG9RdWFudGl0eSIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJoaWdoIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJyYW5nZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6InJhbmdlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJhbmdlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvQ29kZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoiY29kaW5nIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db2RlIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fSwiZWxzZSI6eyJjbGFzc1R5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvZGUiLCJ0eXBlIjoiSW5zdGFuY2UiLCJlbGVtZW50IjpbeyJuYW1lIjoiY29kZSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiY29kaW5nIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fSx7Im5hbWUiOiJzeXN0ZW0iLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiY29kaW5nIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fSx7Im5hbWUiOiJ2ZXJzaW9uIiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2ZXJzaW9uIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJjb2RpbmciLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX19LHsibmFtZSI6ImRpc3BsYXkiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImRpc3BsYXkiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImNvZGluZyIsInR5cGUiOiJPcGVyYW5kUmVmIn19fX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJjb2RpbmciLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kaW5nIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvQ29uY2VwdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoiY29uY2VwdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJ0aGVuIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsidHlwZSI6Ik51bGwifX0sImVsc2UiOnsiY2xhc3NUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ikluc3RhbmNlIiwiZWxlbWVudCI6W3sibmFtZSI6ImNvZGVzIiwidmFsdWUiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImNvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9Db2RlIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6IkMiLCJ0eXBlIjoiQWxpYXNSZWYifV19fX19LHsibmFtZSI6ImRpc3BsYXkiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImNvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiY29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlYWJsZUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn11dWlkIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VGVzdFNjcmlwdFJlcXVlc3RNZXRob2RDb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U29ydERpcmVjdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUJpb2xvZ2ljYWxseURlcml2ZWRQcm9kdWN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VW5pdHNPZlRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BZGRyZXNzVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZUNhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SXNzdWVTZXZlcml0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVUZWFtU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3RydWN0dXJlRGVmaW5pdGlvbktpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QdWJsaWNhdGlvblN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUZISVJWZXJzaW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FyZVBsYW5BY3Rpdml0eUtpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBTb3VyY2VMaXN0TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJlcXVlc3RTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJhbmRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVlc3Rpb25uYWlyZVJlc3BvbnNlU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VhcmNoQ29tcGFyYXRvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNoYXJnZUl0ZW1TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25QYXJ0aWNpcGFudFR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2VUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FyZVBsYW5BY3Rpdml0eVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUludm9pY2VTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1DbGFpbVByb2Nlc3NpbmdDb2RlcyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJlcXVlc3RSZXNvdXJjZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXJ0aWNpcGF0aW9uU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTmFtZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Eb2N1bWVudE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Bc3NlcnRpb25PcGVyYXRvclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EYXlzT2ZXZWVrIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SXNzdWVUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Y2Fub25pY2FsIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3RydWN0dXJlTWFwQ29udGV4dFR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GYW1pbHlIaXN0b3J5U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXh0ZW5zaW9uQ29udGV4dFR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Bc3NlcnRpb25SZXNwb25zZVR5cGVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVxdWVzdEludGVudCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXN0cmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvblJlcXVpcmVkQmVoYXZpb3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HcmFwaENvbXBhcnRtZW50VXNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9b3JpZW50YXRpb25UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWNjb3VudFN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUlkZW50aWZpZXJVc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBUYXJnZXRMaXN0TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUV4cG9zdXJlU3RhdGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0UGFydGljaXBhbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QmluZGluZ1N0cmVuZ3RoIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVxdWVzdFByaW9yaXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGFydGljaXBhbnRSZXF1aXJlZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVhQYXRoVXNhZ2VUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9aWQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GaWx0ZXJPcGVyYXRvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU5hbWluZ1N5c3RlbVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db250cmFjdFJlc291cmNlU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaFN1YmplY3RTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBUcmFuc2Zvcm0iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNwb25zZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9EZWNpbWFsIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGVjaW1hbCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFnZ3JlZ2F0aW9uTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXNlcXVlbmNlVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN5c3RlbVJlc3RmdWxJbnRlcmFjdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFkdmVyc2VFdmVudEFjdHVhbGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN1YnNjcmlwdGlvbkNoYW5uZWxUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXNzZXJ0aW9uRGlyZWN0aW9uVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVQbGFuSW50ZW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWxsZXJneUludG9sZXJhbmNlQ3JpdGljYWxpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9wZXJ0eVJlcHJlc2VudGF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VHJpZ2dlclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db21wb3NpdGlvblN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFwcG9pbnRtZW50U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVzc2FnZVNpZ25pZmljYW5jZUNhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TGlzdE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaEVsZW1lbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb25TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNvdXJjZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9Cb29sZWFuIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Ym9vbGVhbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZU1hcEdyb3VwVHlwZU1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdXBwbHlSZXF1ZXN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyTG9jYXRpb25TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb25hbERlbGV0ZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXVybCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXVyaSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVVzZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SWRlbnRpdHlBc3N1cmFuY2VMZXZlbCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZU1ldHJpY0NvbG9yIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvVGltZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb25hbFJlYWRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2VTZXZlcml0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUZpbmFuY2lhbFJlc291cmNlU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PcGVyYXRpb25LaW5kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3Vic2NyaXB0aW9uU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R29hbExpZmVjeWNsZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uRGF0YVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Eb2N1bWVudFJlZmVyZW5jZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXJlcG9zaXRvcnlUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TG9jYXRpb25TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Ob3RlVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVRlc3RSZXBvcnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlU3lzdGVtQ29udGVudE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GSElSRGV2aWNlU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29udGFjdFBvaW50U3lzdGVtIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2xvdFN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb3BlcnR5VHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVR5cGVEZXJpdmF0aW9uUnVsZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUd1aWRhbmNlUmVzcG9uc2VTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZWxhdGVkQXJ0aWZhY3RUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9b2lkIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29tcGFydG1lbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3RJbnRlbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1JbnZvaWNlUHJpY2VDb21wb25lbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2FsaWJyYXRpb25TdGF0ZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUdyb3VwVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuYWJsZVdoZW5CZWhhdmlvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVRhc2tJbnRlbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1JbW11bml6YXRpb25FdmFsdWF0aW9uU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeGFtcGxlU2NlbmFyaW9BY3RvclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm92ZW5hbmNlRW50aXR5Um9sZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNwZWNpbWVuU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzdGZ1bENhcGFiaWxpdHlNb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV0ZWN0ZWRJc3N1ZVNldmVyaXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmlzaW9uRXllcyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnNlbnREYXRhTWVhbmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfW1lc3NhZ2VoZWFkZXJSZXNwb25zZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HdWlkZVBhZ2VHZW5lcmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RG9jdW1lbnRSZWxhdGlvbnNoaXBUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmFyaWFibGVUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VGVzdFJlcG9ydFJlc3VsdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmNlcHRNYXBHcm91cFVubWFwcGVkTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0RhdGVUaW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9aW5zdGFudCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0RhdGVUaW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9EYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0ludGVnZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1wb3NpdGl2ZUludCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNsaW5pY2FsSW1wcmVzc2lvblN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVsaWdpYmlsaXR5UmVzcG9uc2VQdXJwb3NlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFycmF0aXZlU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1hZ2luZ1N0dWR5U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5kcG9pbnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1CaW9sb2dpY2FsbHlEZXJpdmVkUHJvZHVjdENhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzb3VyY2VWZXJzaW9uUG9saWN5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uQ2FyZGluYWxpdHlCZWhhdmlvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUdyb3VwTWVhc3VyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU5hbWluZ1N5c3RlbUlkZW50aWZpZXJUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1tdW5pemF0aW9uU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EaXNjcmltaW5hdG9yVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZU1hcElucHV0TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUxpbmthZ2VUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVmZXJlbmNlSGFuZGxpbmdQb2xpY3kiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaFN0dWR5U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXVkaXRFdmVudE91dGNvbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TcGVjaW1lbkNvbnRhaW5lZFByZWZlcmVuY2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25SZWxhdGlvbnNoaXBUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uc3RyYWludFNldmVyaXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZlbnRDYXBhYmlsaXR5TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVTZWFyY2hTdXBwb3J0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb25SYW5nZUNhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VURJRW50cnlUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2F0ZWdvcnkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0QWN0aW9uUmVzdWx0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FwYWJpbGl0eVN0YXRlbWVudEtpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FdmVudFRpbWluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlYXJjaFBhcmFtVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvbkdyb3VwaW5nQmVoYXZpb3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBNb2RlbE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UYXNrU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QmlvbG9naWNhbGx5RGVyaXZlZFByb2R1Y3RTdG9yYWdlU2NhbGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HcmFwaENvbXBhcnRtZW50UnVsZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNsaWNpbmdSdWxlcyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUV4cGxhbmF0aW9uT2ZCZW5lZml0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R3VpZGVQYXJhbWV0ZXJDb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2F0YWxvZ0VudHJ5UmVsYXRpb25UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TGlua1R5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25jZXB0TWFwRXF1aXZhbGVuY2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BdWRpdEV2ZW50QWN0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VhcmNoTW9kaWZpZXJDb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZlbnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PcGVyYXRpb25QYXJhbWV0ZXJVc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25zZW50UHJvdmlzaW9uVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvbkNvbmRpdGlvbktpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1xdWFsaXR5VHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFkbWluaXN0cmF0aXZlR2VuZGVyIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVlc3Rpb25uYWlyZUl0ZW1UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2FsaWJyYXRpb25UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZpZGVuY2VWYXJpYWJsZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1jb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uU2VsZWN0aW9uQmVoYXZpb3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdXBwbHlEZWxpdmVyeVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURpYWdub3N0aWNSZXBvcnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GbGFnU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U1BEWExpY2Vuc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1MaXN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9YmFzZTY0QmluYXJ5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlVXNlU3RhdGVtZW50U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXVkaXRFdmVudEFnZW50TmV0d29ya1R5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeHByZXNzaW9uTGFuZ3VhZ2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BZGRyZXNzVXNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29udGFjdFBvaW50VXNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljT3BlcmF0aW9uYWxTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db250cmlidXRvclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZWZlcmVuY2VWZXJzaW9uUnVsZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWFzdXJlUmVwb3J0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VhcmNoRW50cnlNb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvSW50ZWdlciIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXVuc2lnbmVkSW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFtZVVzZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUxvY2F0aW9uTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0ludGVnZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnRlZ2VyIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RkhJUlN1YnN0YW5jZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVF1ZXN0aW9ubmFpcmVJdGVtT3BlcmF0b3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IVFRQVmVyYiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVwaXNvZGVPZkNhcmVTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZW1pdHRhbmNlT3V0Y29tZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfW1hcmtkb3duIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RWxpZ2liaWxpdHlSZXF1ZXN0UHVycG9zZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVF1YW50aXR5Q29tcGFyYXRvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lYXN1cmVSZXBvcnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uUHJlY2hlY2tCZWhhdmlvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNhbXBsZWREYXRhRGF0YVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db21wb3NpdGlvbkF0dGVzdGF0aW9uTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVR5cGVSZXN0ZnVsSW50ZXJhY3Rpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlU3lzdGVtSGllcmFyY2h5TWVhbmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXZDb25maWRlbnRpYWxpdHlDbGFzc2lmaWNhdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnRyYWN0UmVzb3VyY2VQdWJsaWNhdGlvblN0YXR1c0NvZGVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmlzaW9uQmFzZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUJ1bmRsZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX1dfX19" + } +] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-AssessmentAndPlan.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-AssessmentAndPlan.json new file mode 100644 index 00000000..5597281d --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-AssessmentAndPlan.json @@ -0,0 +1,64 @@ +{ + "resourceType": "Questionnaire", + "id": "assessment-and-plan", + "name": "Assessment and Plan Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "status": "draft", + "item":[ + { + "linkId": "AAP", + "text": "Assessment and Plan", + "type": "group", + "item": [ + { + "linkId": "ASM.1", + "text": "Assessment/Status", + "type": "text" + }, + { + "linkId": "PLAN.1", + "text": "Treatment Plan", + "type": "text", + "required": true + }, + { + "linkId": "ORD.1", + "text": "Orders", + "type": "group", + "item": [ + { + "linkId": "ORD.1.1", + "text": "Medications", + "type": "text" + }, + { + "linkId": "ORD.1.2", + "text": "Supplies", + "type": "text" + }, + { + "linkId": "ORD.1.3", + "text": " Investigations / diagnostic testing", + "type": "text" + }, + { + "linkId": "ORD.1.4", + "text": "Consults", + "type": "text" + }, + { + "linkId": "ORD.1.5", + "text": "Other", + "type": "text" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Encounter.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Encounter.json new file mode 100644 index 00000000..19031025 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Encounter.json @@ -0,0 +1,85 @@ +{ + "resourceType": "Questionnaire", + "id": "encounter", + "name": "Encounter Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicClinicalInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "linkId": "ENC", + "text": "Encounter", + "type": "group", + "item": [ + { + "linkId": "ENC.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".RequestEncounterDate" + } + } + ], + "text": "Date of encounter (MM/DD/YYYY)", + "type": "date", + "required": true + }, + { + "linkId": "ENC.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".AnswerYes" + } + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "code": "radio-button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ], + "text": "Is this encounter for the evaluation of the patient’s need for ordered device, service, or medication?", + "required": true, + "type": "choice", + "answerValueSet": "http://terminology.hl7.org/ValueSet/v2-0136" + }, + { + "linkId": "ENC.3", + "text": "If No, purpose of the encounter", + "type": "text", + "required": true, + "enableWhen": [ + { + "question": "ENC.2", + "operator": "=", + "answerCoding": { + "code": "N", + "system": "http://terminology.hl7.org/CodeSystem/v2-0136" + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfo.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfo.json new file mode 100644 index 00000000..a7a6eb24 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfo.json @@ -0,0 +1,130 @@ +{ + "resourceType": "Questionnaire", + "id": "patient-info", + "name": "Patient Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPatientInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "PBD", + "type": "group", + "text": "Patient Information", + "item": [ + { + "linkId": "PBD.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".LastName" + } + } + ], + "text": "Last Name:", + "type": "string", + "required": true + }, + { + "linkId": "PBD.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".FirstName" + } + } + ], + "text": "First Name:", + "type": "string", + "required": true + }, + { + "linkId": "PBD.3", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".MiddleInitial" + } + } + ], + "text": "Middle Initial:", + "type": "string", + "required": true + }, + { + "linkId": "PBD.4", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".DateOfBirth" + } + } + ], + "text": "Date of Birth:", + "type": "date", + "required": true + }, + { + "linkId": "PBD.5", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Gender" + } + } + ], + "text": "Gender", + "type": "choice", + "answerValueSet": "http://hl7.org/fhir/ValueSet/administrative-gender" + }, + { + "linkId": "PBD.6", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".MedicareId" + } + } + ], + "text": "Medicare ID:", + "type": "string", + "required": true + } + ] + } + ] +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfoBase.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfoBase.json new file mode 100644 index 00000000..1fb44220 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientInfoBase.json @@ -0,0 +1,115 @@ +{ + "resourceType": "Questionnaire", + "id": "patient-info-base", + "name": "Base Patient Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPatientInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "PBD", + "type": "group", + "text": "Patient Information", + "item": [ + { + "linkId": "PBD.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".LastName" + } + } + ], + "text": "Last Name:", + "type": "string", + "required": true + }, + { + "linkId": "PBD.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".FirstName" + } + } + ], + "text": "First Name:", + "type": "string", + "required": true + }, + { + "linkId": "PBD.3", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".MiddleInitial" + } + } + ], + "text": "Middle Initial:", + "type": "string", + "required": true + }, + { + "linkId": "PBD.4", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".DateOfBirth" + } + } + ], + "text": "Date of Birth:", + "type": "date", + "required": true + }, + { + "linkId": "PBD.5", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Gender" + } + } + ], + "text": "Gender", + "type": "choice", + "answerValueSet": "http://hl7.org/fhir/ValueSet/administrative-gender" + } + ] + } + ] +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientSignature.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientSignature.json new file mode 100644 index 00000000..bf456917 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PatientSignature.json @@ -0,0 +1,76 @@ +{ + "resourceType": "Questionnaire", + "id": "patient-signature", + "name": "Patient Signature", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPatientInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "SIGPAT", + "text": "Patient Signature", + "type": "group", + "item": [ + { + "linkId": "SIGPAT.1", + "text": "Signature", + "type": "string", + "required": true + }, + { + "linkId": "SIGPAT.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".FullName" + } + } + ], + "text": "Name (Printed)", + "type": "string", + "required": true + }, + { + "linkId": "SIGPAT.3", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Today" + } + } + ], + "text": "Date", + "type": "date", + "required": true + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PhysicalExam.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PhysicalExam.json new file mode 100644 index 00000000..3a87200c --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PhysicalExam.json @@ -0,0 +1,252 @@ +{ + "resourceType": "Questionnaire", + "id": "physical-exam", + "name": "Physican Exam Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "status": "draft", + "item":[ + { + "linkId": "OBJ.PE", + "code": [ + { + "code": "71388-3", + "display": "Physical Exam", + "system": "http://loinc.org/modified" + } + ], + "type": "group", + "text": "Physical Exam", + "item": [ + { + "linkId": "PE.1", + "code": [ + { + "code": "71389-1", + "display": "General Appearance", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "General Appearance" + }, + { + "linkId": "PE.2", + "code": [ + { + "code": "71390-9", + "display": "Head and Face", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Head and Face" + }, + { + "linkId": "PE.3", + "code": [ + { + "code": "71391-7", + "display": "Eyes", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Eyes" + }, + { + "linkId": "PE.4", + "code": [ + { + "code": "71392-5", + "display": "Ears, nose, mouth and throat", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Ears, nose, mouth and throat" + }, + { + "linkId": "PE.5", + "code": [ + { + "code": "71393-3", + "display": "Neck", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Neck" + }, + { + "linkId": "PE.6", + "code": [ + { + "code": "71394-1", + "display": "Respiratory System", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Respiratory System" + }, + { + "linkId": "PE.7", + "code": [ + { + "code": "71395-8", + "display": "Cardiovascular System", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Cardiovascular System" + }, + { + "linkId": "PE.8", + "code": [ + { + "code": "71396-6", + "display": "Breast", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Breast" + }, + { + "linkId": "PE.9", + "code": [ + { + "code": "71397-4", + "display": "Gastrointestinal System/Abdomen", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Gastrointestinal System/Abdomen" + }, + { + "linkId": "PE.10", + "code": [ + { + "code": "71398-2", + "display": "Genitourinary System - male", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Genitourinary System - male" + }, + { + "linkId": "PE.11", + "code": [ + { + "code": "71399-0", + "display": "Genitourinary System - female", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Genitourinary System - female" + }, + { + "linkId": "PE.12", + "code": [ + { + "code": "71400-6", + "display": "Lymphatic System", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Lymphatic System" + }, + { + "linkId": "PE.13", + "code": [ + { + "code": "71401-4", + "display": "Extremeties", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Extremeties" + }, + { + "linkId": "PE.14", + "code": [ + { + "code": "71402-2", + "display": "Musculoskeletal System", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Musculoskeletal System" + }, + { + "linkId": "PE.15", + "code": [ + { + "code": "71403-0", + "display": "Skin", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Skin" + }, + { + "linkId": "PE.16", + "code": [ + { + "code": "71404-8", + "display": "Neurologic System", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Neurologic System" + }, + { + "linkId": "PE.17", + "code": [ + { + "code": "71405-5", + "display": "Psychiatric System", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Psychiatric System" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "text": "Help-Button", + "coding": [ + { + "code": "help", + "display": "Help-Button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ], + "linkId": "PE.18", + "type": "display", + "text": "Levels of E/M services are based on four types of examination: Problem Focused - a limited examination of the affected body area or organ system. Expanded Problem Focused - a limited examination of the affected body area or organ system and any other symptomatic or related body area(s) or organ system(s). Detailed - An extended examination of the affected body area or organ system and any other symptomatic or related body area(s) or organ system(s). Comprehensive - general multi-system examination, or complete examination of a single organ system and other symptomatic or related body area(s) or organ system(s).General multi-system or single organ examination may be performed by any physician regardless of specialty. The type and content of the examination are selected by the physician and based on clinical judgment, the patient's history and the nature of the presenting problem." + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfo.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfo.json new file mode 100644 index 00000000..e930b5d5 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfo.json @@ -0,0 +1,121 @@ +{ + "resourceType": "Questionnaire", + "id": "practitioner-info", + "name": "Practitioner Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicClinicalInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "PND", + "text": "Provider who performed the in-person evaluation", + "type": "group", + "item": [ + { + "linkId": "PND.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".EncounterProviderLastName" + } + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/minLength", + "valueInteger": 2 + } + ], + "text": "Last Name", + "type": "string", + "maxLength": 26 + }, + { + "linkId": "PND.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".EncounterProviderFirstName" + } + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/minLength", + "valueInteger": 2 + } + ], + "text": "First Name", + "type": "string", + "maxLength": 26 + }, + { + "linkId": "PND.3", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".EncounterProviderMiddleInitial" + } + } + ], + "text": "Middle Initial", + "type": "string" + }, + { + "linkId": "PND.4", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".EncounterProviderNPI" + } + } + ], + "text": "NPI", + "type": "string" + }, + { + "linkId": "PND.5", + "text": "Date of F2F encounter", + "type": "date", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".RequestEncounterDate" + } + } + ] + } + ] + } + ] +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfoBase.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfoBase.json new file mode 100644 index 00000000..f0ee8a7b --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-PractitionerInfoBase.json @@ -0,0 +1,106 @@ +{ + "resourceType": "Questionnaire", + "id": "practitioner-info-base", + "name": "Base Practitioner Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicClinicalInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "PND", + "text": "Provider who performed the in-person evaluation", + "type": "group", + "item": [ + { + "linkId": "PND.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".LastName" + } + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/minLength", + "valueInteger": 2 + } + ], + "text": "Last Name", + "type": "string", + "maxLength": 26 + }, + { + "linkId": "PND.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FirstName" + } + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/minLength", + "valueInteger": 2 + } + ], + "text": "First Name", + "type": "string", + "maxLength": 26 + }, + { + "linkId": "PND.3", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".MiddleInitial" + } + } + ], + "text": "Middle Initial", + "type": "string" + }, + { + "linkId": "PND.4", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".NPI" + } + } + ], + "text": "NPI", + "type": "string" + } + ] + } + ] +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ProviderSignature.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ProviderSignature.json new file mode 100644 index 00000000..4a8a92f9 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ProviderSignature.json @@ -0,0 +1,91 @@ +{ + "resourceType": "Questionnaire", + "id": "provider-signature", + "name": "Provider Signature", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPractitionerInfo-prepopulation" + } + ], + "status": "draft", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "linkId": "SIGPNP", + "text": "Provider Signature", + "type": "group", + "item": [ + { + "linkId": "SIGPNP.1", + "text": "Signature", + "type": "string", + "required": true + }, + { + "linkId": "SIGPNP.2", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FullName" + } + } + ], + "text": "Name (Printed)", + "type": "string", + "required": true + }, + { + "linkId": "SIGPNP.3", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Today" + } + } + ], + "text": "Date", + "type": "date", + "required": true + }, + { + "linkId": "SIGPNP.4", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".NPI" + } + } + ], + "text": "NPI", + "type": "string", + "required": true + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ReviewOfSystem.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ReviewOfSystem.json new file mode 100644 index 00000000..338e199b --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-ReviewOfSystem.json @@ -0,0 +1,3527 @@ +{ + "resourceType": "Questionnaire", + "id": "review-of-system", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "name": "Review Of System Module", + "status": "draft", + "item": [ + { + "linkId": "ROS", + "code": [ + { + "code": "71406-3", + "display": "Review of Systems", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Review of Systems", + "item": [ + { + "linkId": "ROS.1", + "code": [ + { + "code": "71407-1", + "display": "Constitutional / General", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Constitutional / General", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.1", + "code": [ + { + "code": "8943002", + "display": "Weight gain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weight gain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.2", + "code": [ + { + "code": "89362005", + "display": "Weight loss", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weight loss", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.3", + "code": [ + { + "code": "44186003", + "display": "Sleeping problems", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Sleeping problems", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.4", + "code": [ + { + "code": "84229001", + "display": "Fatigue", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fatigue", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.5", + "code": [ + { + "code": "386725007", + "display": "Fever", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fever", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.6", + "code": [ + { + "code": "43724002", + "display": "Chills", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Chills", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.7", + "code": [ + { + "code": "42984000", + "display": "Night sweats", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Night sweats", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.1.8", + "code": [ + { + "code": "52613005", + "display": "Excessive sweating", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Excessive sweating", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.1.9", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.2", + "code": [ + { + "code": "71408-9", + "display": "Eye", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Eye", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.1", + "code": [ + { + "code": "24982008", + "display": "Diplopia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Diplopia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.2", + "code": [ + { + "code": "225582009", + "display": "Glasses", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Glasses", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.3", + "code": [ + { + "code": "285049007", + "display": "Contact lenses", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Contact lenses", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "code": [ + { + "code": "75705005", + "display": "Redness", + "system": "http://snomed.info/sct" + } + ], + "linkId": "ROS.2.4", + "type": "choice", + "text": "Redness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.5", + "code": [ + { + "code": "18628002", + "display": "Discharge", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.6", + "code": [ + { + "code": "111516008", + "display": "Blurred vision", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Blurred vision", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.7", + "code": [ + { + "code": "23986001", + "display": "Glaucoma", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Glaucoma", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.2.8", + "code": [ + { + "code": "193570009", + "display": "Cataracts", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cataracts", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.2.9", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.3", + "code": [ + { + "code": "71409-7", + "display": "Ear-nose-mouth-throat", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Ear-nose-mouth-throat", + "item": [ + { + "linkId": "ROS.3.1", + "type": "group", + "text": "Nose", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.1", + "code": [ + { + "code": "249366005", + "display": "Epistaxis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Epistaxis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.2", + "code": [ + { + "code": "36971009", + "display": "Frequent sinus infections", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Frequent sinus infections", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.3", + "code": [ + { + "code": "64531003", + "display": "Discharge", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.1.4", + "code": [ + { + "code": "736499003", + "display": "Polyps", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Polyps", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "string", + "linkId": "ROS.3.1.5", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.3.2", + "type": "group", + "text": "Ear", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.2.1", + "code": [ + { + "code": "60862001", + "display": "Tinnitus", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tinnitus", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "choice", + "code": [ + { + "code": "300132001", + "display": "Discharge", + "system": "http://snomed.info/sct" + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.2.2", + "text": "Discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "choice", + "code": [ + { + "code": "15188001", + "display": "Hearing loss", + "system": "http://snomed.info/sct" + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.2.3", + "text": "Hearing loss", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "string", + "code": [], + "linkId": "ROS.3.2.4", + "text": "Other" + } + ] + }, + { + "type": "group", + "code": [], + "linkId": "ROS.3.3", + "text": "Mouth", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.3.1", + "code": [ + { + "code": "288939007", + "display": "Odynaphagia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Odynaphagia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.3.2", + "code": [ + { + "code": "46557008", + "display": "Tooth disorder", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tooth disorder", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.3.3", + "code": [ + { + "code": "278615005", + "display": "Uses dentures", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Uses dentures", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.3.3.4", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.3.4", + "type": "group", + "text": "Throat", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.3.4.1", + "code": [ + { + "code": "50219008", + "display": "Hoarseness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hoarseness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.3.4.2", + "type": "string", + "text": "Other" + } + ] + } + ] + }, + { + "linkId": "ROS.4", + "code": [ + { + "code": "71410-5", + "display": "Cardiovascular", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Cardiovascular System", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.1", + "code": [ + { + "code": "29857009", + "display": "Chest pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Chest pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.2", + "code": [ + { + "code": "80313002", + "display": "Palpitations", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Palpitations", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.3", + "code": [ + { + "code": "62744007", + "display": "Orthopnea", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Orthopnea", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.4.4", + "code": [ + { + "code": "88610006", + "display": "Murmur", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Murmur", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.4.5", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.5", + "code": [ + { + "code": "71411-3", + "display": "Respiratory", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Respiratory System", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.1", + "code": [ + { + "code": "49727002", + "display": "Cough", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cough", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.2", + "code": [ + { + "code": "66857006", + "display": "Hemoptysis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hemoptysis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.3", + "code": [ + { + "code": "267036007", + "display": "Shortness of breath", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Shortness of breath", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.4", + "code": [ + { + "code": "248599002", + "display": "Excess sputum production", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Excess sputum production", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.5.5", + "code": [ + { + "code": "56018004", + "display": "Wheezing", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Wheezing", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.5.6", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.6", + "code": [ + { + "code": "71412-1", + "display": "Gastrointestinal System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Gastrointestinal", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.1", + "code": [ + { + "code": "399122003", + "display": "Swallowing problem", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Swallowing problem", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.2", + "code": [ + { + "code": "21522001", + "display": "Abdominal pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Abdominal pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.3", + "code": [ + { + "code": "16331000", + "display": "Heartburn", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Heartburn", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.4", + "code": [ + { + "code": "422587007", + "display": "Nausea", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Nausea", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.5", + "code": [ + { + "code": "422400008", + "display": "Vomiting", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Vomiting", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.6", + "code": [ + { + "code": "8765009", + "display": "Hematemesis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hematemesis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.7", + "code": [ + { + "code": "14760008", + "display": "Constipation", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Constipation", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.8", + "code": [ + { + "code": "62315008", + "display": "Diarrhea", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Diarrhea", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.9", + "code": [ + { + "code": "2901004", + "display": "Melena", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Melena", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.10", + "code": [ + { + "code": "405729008", + "display": "Blood in stool", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Blood in stool", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.11", + "code": [ + { + "code": "40845000", + "display": "Ulcer", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Ulcer", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.6.12", + "code": [ + { + "code": "18165001", + "display": "Jaundice", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Jaundice", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.6.13", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.7", + "code": [ + { + "code": "71413-9", + "display": "Genitourinary", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Genitourinary System", + "item": [ + { + "linkId": "ROS.7.1", + "type": "group", + "text": "Urination", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.1", + "code": [ + { + "code": "162116003", + "display": "Increased frequency", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Increased frequency", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.2", + "code": [ + { + "code": "75088002", + "display": "Urgency", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Urgency", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.3", + "code": [ + { + "code": "5972002", + "display": "Hesitancy", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hesitancy", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.4", + "code": [ + { + "code": "48340000", + "display": "Incontinence", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Incontinence", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.5", + "code": [ + { + "code": "49650001", + "display": "Dysuria", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Dysuria", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.6", + "code": [ + { + "code": "28442001", + "display": "Polyuria", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Polyuria", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.7", + "code": [ + { + "code": "139394000", + "display": "Nocturia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Nocturia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.1.8", + "code": [ + { + "code": "34436003", + "display": "Hematuria", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hematuria", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.7.2", + "code": [ + { + "code": "247355005", + "display": "Flank pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Flank pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.7.3", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.8", + "code": [ + { + "code": "71414-7", + "display": "Musculoskeletal", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Musculoskeletal System", + "item": [ + { + "linkId": "ROS.8.1", + "type": "group", + "text": "Joint", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.1", + "code": [ + { + "code": "279069000", + "display": "Pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.2", + "code": [ + { + "code": "300887003", + "display": "Swelling", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Swelling", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.3", + "code": [ + { + "code": "84445001", + "display": "Stiffness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Stiffness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.4", + "code": [ + { + "code": "72704001", + "display": "Fracture", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fracture", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.5", + "code": [ + { + "code": "70733008", + "display": "Range of motion limitation", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Range of motion limitation", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.1.6", + "code": [ + { + "code": "417893002", + "display": "Deformity", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Deformity", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "linkId": "ROS.8.2", + "type": "group", + "text": "Muscle", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.1", + "code": [ + { + "code": "68962001", + "display": "Pain", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pain", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.2", + "code": [ + { + "code": "82470000", + "display": "Fasciculation", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fasciculation", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.3", + "code": [ + { + "code": "88092000", + "display": "Atrophy", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Atrophy", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.4", + "code": [ + { + "code": "26544005", + "display": "Weakness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weakness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.8.2.5", + "code": [ + { + "code": "55300003", + "display": "Cramps", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cramps", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "linkId": "ROS.8.3", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.9", + "code": [ + { + "code": "71415-4", + "display": "Skin", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Skin", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.1", + "code": [ + { + "code": "399912005", + "display": "Pressure ulcer", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pressure ulcer", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.2", + "code": [ + { + "code": "271807003", + "display": "Rash", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Rash", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.7", + "code": [ + { + "code": "43116000", + "display": "Eczema", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Eczema", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.8", + "code": [ + { + "code": "418363000", + "display": "Pruritus", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pruritus", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.3", + "code": [ + { + "code": "247493001", + "display": "Splitting nail", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Splitting nail", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.4", + "code": [ + { + "code": "89704006", + "display": "Pitting nail", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Pitting nail", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.5", + "code": [ + { + "code": "278040002", + "display": "Hair loss", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hair loss", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.9.6", + "code": [ + { + "code": "271607001", + "display": "Excessive hair growth", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Excessive hair growth", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.9.9", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.10", + "code": [ + { + "code": "71416-2", + "display": "Neurologic System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Neurological", + "item": [ + { + "type": "choice", + "code": [ + { + "code": "91175000", + "display": "Seizure", + "system": "http://snomed.info/sct" + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.1", + "text": "Seizure", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.2", + "code": [ + { + "code": "44077006", + "display": "Numbness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Numbness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.3", + "code": [ + { + "code": "62507009", + "display": "Tingling", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tingling", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.4", + "code": [ + { + "code": "55406008", + "display": "Increased pain to touch", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Increased pain to touch", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.5", + "code": [ + { + "code": "279079003", + "display": "Dysesthesia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Dysesthesia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.6", + "code": [ + { + "code": "25064002", + "display": "Headache", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Headache", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.7", + "code": [ + { + "code": "41786007", + "display": "Weakness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Weakness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.8", + "code": [ + { + "code": "404640003", + "display": "Dizziness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Dizziness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.9", + "code": [ + { + "code": "271594007", + "display": "Fainting", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fainting", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.10", + "code": [ + { + "code": "44695005", + "display": "Paralysis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Paralysis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.11", + "code": [ + { + "code": "26079004", + "display": "Tremors", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tremors", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.12", + "code": [ + { + "code": "267078001", + "display": "Involuntary movements", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Involuntary movements", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.13", + "code": [ + { + "code": "22631008", + "display": "Unstable gait", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Unstable gait", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.14", + "code": [ + { + "code": "161898004", + "display": "Fall", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Fall", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.15", + "code": [ + { + "code": "386807006", + "display": "Impaired memory", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Impaired memory", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "drop-down", + "display": "Drop down" + } + ], + "text": "Drop down" + } + } + ], + "linkId": "ROS.10.17", + "code": [ + { + "code": "26329005", + "display": "Poor concentration", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Poor concentration", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.10.16", + "code": [ + { + "code": "229683000", + "display": "Speech disorders", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Speech disorders", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.10.18", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.11", + "code": [ + { + "code": "71417-0", + "display": "Psychiatric System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Psychiatric", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.1", + "code": [ + { + "code": "7011001", + "display": "Hallucinations", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hallucinations", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.2", + "code": [ + { + "code": "2073000", + "display": "Delusions", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Delusions", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.3", + "code": [ + { + "code": "366979004", + "display": "Depressed mood", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Depressed mood", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.11.4", + "code": [ + { + "code": "48694002", + "display": "Anxiety", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Anxiety", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.11.5", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.12", + "code": [ + { + "code": "71418-8", + "display": "Endocrine", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Endocrine", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.1", + "code": [ + { + "code": "69215007", + "display": "Heat intolerance", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Heat intolerance", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.2", + "code": [ + { + "code": "80585000", + "display": "Cold intolerance", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Cold intolerance", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.3", + "code": [ + { + "code": "3716002", + "display": "Goiter", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Goiter", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.4", + "code": [ + { + "code": "80182007", + "display": "Menstrual irregularity", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Menstrual irregularity", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.12.5", + "code": [ + { + "code": "170951000", + "display": "Menopausal symptoms", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Menopausal symptoms", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "type": "group", + "code": [], + "linkId": "ROS.12.6", + "text": "Breast", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.1", + "code": [ + { + "code": "89164003", + "display": "Mass/tumor", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Mass/tumor", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.2", + "code": [ + { + "code": "55222007", + "display": "Tenderness", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Tenderness", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.3", + "code": [ + { + "code": "54302000", + "display": "Nipple discharge", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Nipple discharge", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.12.6.4", + "code": [ + { + "code": "4754008", + "display": "Gynecomastia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Gynecomastia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "linkId": "ROS.12.7", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.13", + "code": [ + { + "code": "71419-6", + "display": "Hematologic - Lymphatic System", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Hematologic - lymphatic", + "item": [ + { + "linkId": "ROS.13.1", + "type": "group", + "text": "Swollen glands", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.13.1.1", + "code": [ + { + "code": "425061006", + "display": "Neck", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Neck", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.13.1.2", + "code": [ + { + "code": "127189005", + "display": "Axilla", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Axilla", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button", + "display": "Radio Button" + } + ], + "text": "Radio Button" + } + } + ], + "linkId": "ROS.13.1.3", + "code": [ + { + "code": "127199000", + "display": "Groin", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Groin", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.2", + "code": [ + { + "code": "79654002", + "display": "Edema", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Edema", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.3", + "code": [ + { + "code": "63491006", + "display": "Claudication", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Claudication", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.4", + "code": [ + { + "code": "128060009", + "display": "Varicose veins", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Varicose veins", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.5", + "code": [ + { + "code": "64156001", + "display": "Thrombophlebitis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Thrombophlebitis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.6", + "code": [ + { + "code": "271737000", + "display": "Anemia", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Anemia", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.7", + "code": [ + { + "code": "125667009", + "display": "Bruising", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Bruising", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.8", + "code": [ + { + "code": "64779008", + "display": "Bleeding disorder", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Bleeding disorder", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.13.9", + "code": [ + { + "code": "95344007", + "display": "Lower extremity ulcer", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Lower extremity ulcer", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.13.10", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.14", + "code": [ + { + "code": "71420-4", + "display": "Allergic/immunologic", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Allergic/immunologic", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.14.1", + "code": [ + { + "code": "247472004", + "display": "Hives", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Hives", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "radio-button" + } + ] + } + } + ], + "linkId": "ROS.14.2", + "code": [ + { + "code": "39579001", + "display": "Anaphylaxis", + "system": "http://snomed.info/sct" + } + ], + "type": "choice", + "text": "Anaphylaxis", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked" + }, + { + "linkId": "ROS.14.3", + "type": "string", + "text": "Other" + } + ] + }, + { + "linkId": "ROS.15", + "type": "display", + "text": "A review of systems is an inventory of body systems obtained through a series of questions seeking to identify signs and/or symptoms which the patient may be experiencing or has experienced", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "text": "Help-Button", + "coding": [ + { + "code": "help", + "display": "Help-Button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Subjective.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Subjective.json new file mode 100644 index 00000000..cc1328ab --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-Subjective.json @@ -0,0 +1,113 @@ +{ + "resourceType": "Questionnaire", + "id": "subjective", + "name": "Subjective Module", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicClinicalInfo-prepopulation" + } + ], + "status": "draft", + "item":[ + { + "linkId": "SUB", + "text": "Subjective", + "type": "group", + "item": [ + { + "linkId": "SUB.1", + "text": "Chief complaint / history of present illness and associated signs / symptoms", + "type": "text" + }, + { + "linkId": "SUB.2", + "text": "Related past medical / surgical history", + "type": "text" + }, + { + "linkId": "MED.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + }, + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".MedicationTupleList" + } + } + ], + "text": "Medication", + "type": "group", + "repeats": true, + "item": [ + { + "linkId": "MED.1.1", + "text": "RxNorm", + "type": "string" + }, + { + "linkId": "MED.1.2", + "text": "Description", + "type": "string" + }, + { + "linkId": "MED.1.3", + "text": "Dose", + "type": "string" + }, + { + "linkId": "MED.1.4", + "text": "Frequency", + "type": "open-choice", + "answerValueSet":"http://hl7.org/fhir/ValueSet/timing-abbreviation" + }, + { + "linkId": "MED.1.5", + "text": "Route", + "type": "string" + }, + { + "linkId": "MED.1.6", + "text": "Status", + "type": "choice", + "answerValueSet": "http://hl7.org/fhir/ValueSet/medicationrequest-status" + } + ] + }, + { + "linkId": "ALL.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicClinicalInfoPrepopulation\".Allergies" + } + } + ], + "text": "Allergy", + "type": "open-choice", + "repeats": true, + "anwerOption": [] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-VitalSigns.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-VitalSigns.json new file mode 100644 index 00000000..efa8402a --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Questionnaire-R4-VitalSigns.json @@ -0,0 +1,890 @@ +{ + "resourceType": "Questionnaire", + "id": "vital-signs", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "name": "Vital Signs", + "status": "draft", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/variable", + "valueExpression": { + "name": "weight", + "language": "text/fhirpath", + "expression": "%resource.repeat(item).where(linkId='VS.14').answer.valueDecimal" + } + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/variable", + "valueExpression": { + "name": "height", + "language": "text/fhirpath", + "expression": "%resource.repeat(item).where(linkId='VS.11').answer.valueDecimal*0.0254" + } + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/variable", + "valueExpression": { + "name": "systolic", + "language": "text/fhirpath", + "expression": "%resource.repeat(item).where(linkId='VS.16.1').answer.valueDecimal" + } + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/variable", + "valueExpression": { + "name": "diastolic", + "language": "text/fhirpath", + "expression": "%resource.repeat(item).where(linkId='VS.16.2').answer.valueDecimal" + } + } + ], + "item": [ + { + "linkId": "OBJ.VS", + "code": [ + { + "code": "85353-1", + "display": "Vital Signs", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Vital Signs", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "{breaths}/min" + } + } + ], + "linkId": "VS.1", + "code": [ + { + "code": "9279-1", + "display": "Respiration rate", + "system": "http://loinc.org/modified" + } + ], + "type": "decimal", + "text": "Respiration rate" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "{beats}/min" + } + } + ], + "linkId": "VS.2", + "code": [ + { + "code": "8867-4", + "display": "Heart rate", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Heart rate" + }, + { + "linkId": "VS.3", + "code": [ + { + "code": "8361-8", + "display": "Body position with respect to gravity", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Body position with respect to gravity", + "answerOption": [ + { + "valueCoding": { + "code": "LA11868-9", + "display": "Sitting" + } + }, + { + "valueCoding": { + "code": "LA11869-7", + "display": "Lying" + } + }, + { + "valueCoding": { + "code": "LA11870-5", + "display": "Standing" + } + } + ] + }, + { + "linkId": "VS.4", + "code": [ + { + "code": "8887-2", + "display": "Heart Rate Device Class", + "system": "http://loinc.org" + } + ], + "type": "string", + "text": "Heart Rate Device Class" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "%" + } + } + ], + "linkId": "VS.5", + "code": [ + { + "code": "59408-5", + "display": "SaO2 % Arterial Blood Pulse Oximetry", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "SaO2 % Arterial Blood Pulse Oximetry" + }, + { + "linkId": "VS.6", + "code": [ + { + "code": "3151-8", + "display": "Inhaled O2 flow rate", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Inhaled O2 flow rate", + "answerOption": [ + { + "valueCoding": { + "code": "LA11849-9", + "display": "Room air" + } + }, + { + "valueCoding": { + "code": "LA11850-7", + "display": "1 liter/min" + } + }, + { + "valueCoding": { + "code": "LA11851-5", + "display": "2 liters/min" + } + }, + { + "valueCoding": { + "code": "LA11852-3", + "display": "3 liters/min" + } + }, + { + "valueCoding": { + "code": "LA11853-1", + "display": "4 liters/min" + } + }, + { + "valueCoding": { + "code": "LA11854-9", + "display": "5 liters/min" + } + }, + { + "valueCoding": { + "code": "LA11855-6", + "display": "6 liters/min" + } + } + ], + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "text": "Help-Button", + "coding": [ + { + "code": "help", + "display": "Help-Button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ], + "linkId": "VS.6.1", + "type": "display", + "text": "Liters per minute of oxygen used for masks that have a volume per minute" + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "Cel" + } + } + ], + "linkId": "VS.7", + "code": [ + { + "code": "8310-5", + "display": "Body temperature", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Body temperature" + }, + { + "linkId": "VS.8", + "code": [ + { + "code": "8327-9", + "display": "Body temperature measurement site", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Body temperature measurement site", + "answerOption": [ + { + "valueCoding": { + "code": "LA9370-3", + "display": "Axillary" + } + }, + { + "valueCoding": { + "code": "LA9367-9", + "display": "Oral" + } + }, + { + "valueCoding": { + "code": "LA21929-7", + "display": "Ear" + } + }, + { + "valueCoding": { + "code": "LA9368-7", + "display": "Tympanic membrane" + } + }, + { + "valueCoding": { + "code": "LA21928-9", + "display": "Temporal artery (forehead)" + } + }, + { + "valueCoding": { + "code": "LA9369-5", + "display": "Rectal" + } + }, + { + "valueCoding": { + "code": "LA9371-1", + "display": "Urinary bladder" + } + }, + { + "valueCoding": { + "code": "LA9263-0", + "display": "Nasal" + } + }, + { + "valueCoding": { + "code": "LA18005-1", + "display": "Nasopharyngeal" + } + }, + { + "valueCoding": { + "code": "LA11862-2", + "display": "Finger" + } + }, + { + "valueCoding": { + "code": "LA21930-5", + "display": "Toe" + } + } + ] + }, + { + "linkId": "VS.9", + "code": [ + { + "code": "8326-1", + "display": "Body temperature device class", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Body temperature device class", + "answerOption": [ + { + "valueCoding": { + "code": "LA24040-0", + "display": "Digital thermometer" + } + }, + { + "valueCoding": { + "code": "LA24043-4", + "display": "Liquid-crystal temperature-sensitive strip" + } + }, + { + "valueCoding": { + "code": "LA24038-4", + "display": "Mercury thermometer" + } + }, + { + "valueCoding": { + "code": "LA24037-6", + "display": "Non-contact infrared thermometer (NCIT)" + } + }, + { + "valueCoding": { + "code": "LA24042-6", + "display": "Temporal artery infrared thermometer" + } + }, + { + "valueCoding": { + "code": "LA24039-2", + "display": "Thermal scanner camera" + } + }, + { + "valueCoding": { + "code": "LA24041-8", + "display": "Tympanic infrared thermometer" + } + } + ] + }, + { + "linkId": "VS.10", + "code": [ + { + "code": "8352-7", + "display": "Clothing worn during measure", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Clothing worn during measure", + "answerOption": [ + { + "valueCoding": { + "code": "LA11871-3", + "display": "Underwear or less" + } + }, + { + "valueCoding": { + "code": "LA11872-1", + "display": "Street clothes, no shoes" + } + }, + { + "valueCoding": { + "code": "LA11873-9", + "display": "Street clothes & shoes" + } + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "[in_i]" + } + } + ], + "linkId": "VS.11", + "code": [ + { + "code": "8302-2", + "display": "Body height", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Body height" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption", + "valueCoding": { + "display": "[in_us]" + } + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption", + "valueCoding": { + "display": "cm" + } + } + ], + "linkId": "VS.12", + "code": [ + { + "code": "8306-3", + "display": "Body height lying", + "system": "http://loinc.org" + } + ], + "type": "quantity", + "text": "Body height lying" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "cm" + } + } + ], + "linkId": "VS.13", + "code": [ + { + "code": "8287-5", + "display": "Head circumference occipital frontal by tape measure", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Head circumference occipital frontal by tape measure" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "kg" + } + } + ], + "linkId": "VS.14", + "code": [ + { + "code": "29463-7", + "display": "Body weight", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Body weight" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "kg/m2" + } + }, + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression", + "valueExpression": { + "description": "BMI calculation", + "language": "text/fhirpath", + "expression": "(%weight/%height/%height).round(1)" + } + } + ], + "linkId": "VS.15", + "code": [ + { + "code": "39156-5", + "display": "BMI", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "BMI" + }, + { + "linkId": "VS.16", + "code": [ + { + "code": "85354-9", + "display": "Blood Pressure", + "system": "http://loinc.org" + } + ], + "type": "group", + "text": "Blood Pressure", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "mm[Hg]" + } + } + ], + "linkId": "VS.16.1", + "code": [ + { + "code": "8480-6", + "display": "Systolic", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Systolic" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "mm[Hg]" + } + } + ], + "linkId": "VS.16.2", + "code": [ + { + "code": "8462-4", + "display": "Diastolic", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Diastolic" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "mm[Hg]" + } + }, + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression", + "valueExpression": { + "description": "Mean arterial calculation", + "language": "text/fhirpath", + "expression": "((%systolic+2*(%diastolic))/3).round(0)" + } + } + ], + "linkId": "VS.16.3", + "code": [ + { + "code": "8478-0", + "display": "Mean", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Mean" + }, + { + "linkId": "VS.1.4", + "code": [ + { + "code": "8357-6", + "display": "Method", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Method", + "answerOption": [ + { + "valueCoding": { + "code": "LA24013-7", + "display": "Auscultation - automatic" + } + }, + { + "valueCoding": { + "code": "LA24012-9", + "display": "Auscultation - manual" + } + }, + { + "valueCoding": { + "code": "LA24014-5", + "display": "Oscillometry" + } + }, + { + "valueCoding": { + "code": "LA24016-0", + "display": "Continuous noninvasive arterial pressure (CNAP)" + } + }, + { + "valueCoding": { + "code": "LA24015-2", + "display": "Invasive (intravascular transducer)" + } + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-optionPrefix", + "valueString": "3308001" + } + ], + "valueCoding": { + "code": "LA25780-0", + "display": "Arterial line" + } + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-optionPrefix", + "valueString": "3308003" + } + ], + "valueCoding": { + "code": "LA19771-7", + "display": "Doppler" + } + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-optionPrefix", + "valueString": "3308009" + } + ], + "valueCoding": { + "code": "LA25782-6", + "display": "Cuff-manual palpated only" + } + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-optionPrefix", + "valueString": "3308011" + } + ], + "valueCoding": { + "code": "LA25783-4", + "display": "Venous line" + } + } + ] + }, + { + "linkId": "VS.16.5", + "code": [ + { + "code": "41904-4", + "display": "Measurement site", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Measurement site", + "answerOption": [ + { + "valueCoding": { + "code": "LA11158-5", + "display": "Biceps left" + } + }, + { + "valueCoding": { + "code": "LA11159-3", + "display": "Biceps right" + } + }, + { + "valueCoding": { + "code": "LA11160-1", + "display": "Wrist left" + } + }, + { + "valueCoding": { + "code": "LA11161-9", + "display": "Wrist right" + } + }, + { + "valueCoding": { + "code": "LA21901-6", + "display": "Thigh left" + } + }, + { + "valueCoding": { + "code": "LA21900-8", + "display": "Thigh right" + } + }, + { + "valueCoding": { + "code": "LA21903-2", + "display": "Ankle left" + } + }, + { + "valueCoding": { + "code": "LA21902-4", + "display": "Ankle right" + } + }, + { + "valueCoding": { + "code": "LA11862-2", + "display": "Finger" + } + } + ] + }, + { + "linkId": "VS.16.6", + "code": [ + { + "code": "8358-4", + "display": "Device cuff size", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Device cuff size", + "answerOption": [ + { + "valueCoding": { + "code": "LA11162-7", + "display": "Adult standard" + } + }, + { + "valueCoding": { + "code": "LA11163-5", + "display": "Adult large" + } + }, + { + "valueCoding": { + "code": "LA11164-3", + "display": "Thigh extra large" + } + } + ] + }, + { + "linkId": "VS.16.7", + "code": [ + { + "code": "41901-0", + "display": "Device class", + "system": "http://loinc.org" + } + ], + "type": "choice", + "text": "Device class", + "answerOption": [ + { + "valueCoding": { + "code": "LA24017-8", + "display": "Mercury sphygmomanometer" + } + }, + { + "valueCoding": { + "code": "LA24018-6", + "display": "Aneroid (mechanical) sphygmomanometer" + } + }, + { + "valueCoding": { + "code": "LA24019-4", + "display": "Ambulatory oscillometric device" + } + }, + { + "valueCoding": { + "code": "LA24020-2", + "display": "Home oscillometric device" + } + }, + { + "valueCoding": { + "code": "LA24021-0", + "display": "Continuous noninvasive arterial pressure (CNAP) device" + } + }, + { + "valueCoding": { + "code": "LA24022-8", + "display": "Invasive arterial blood pressure device" + } + } + ] + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "text": "Help-Button", + "coding": [ + { + "code": "help", + "display": "Help-Button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ], + "linkId": "VS.17", + "type": "display", + "text": "This term was created for, but is not limited in use to, the HL7 FHIR Vital Signs Profile (http://build.fhir.org/observation-vitalsigns.html). This collection includes the standard vital sign measurements (heart and respiratory rate, blood pressure and body temperature) along with measurements for oxygen saturation, height, weight, head circumference, and body mass index (BMI). All measurements are optional in this panel." + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-administrative-gender.json b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-administrative-gender.json new file mode 100644 index 00000000..c4d51b8a --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-administrative-gender.json @@ -0,0 +1,142 @@ +{ + "resourceType" : "ValueSet", + "id" : "administrative-gender", + "meta" : { + "versionId" : "1", + "lastUpdated" : "2018-12-14T02:04:45.957Z", + "profile" : [ + "http://hl7.org/fhir/StructureDefinition/shareablevalueset" + ] + }, + "text" : { + "status" : "generated", + "div" : "
http://hl7.org/fhir/administrative-gendermaleMale
http://hl7.org/fhir/administrative-genderfemaleFemale
http://hl7.org/fhir/administrative-genderotherOther
http://hl7.org/fhir/administrative-genderunknownUnknown
" + }, + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg", + "valueCode" : "pa" + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status", + "valueCode" : "normative" + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm", + "valueInteger" : 5 + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version", + "valueCode" : "4.0.0" + } + ], + "url" : "http://hl7.org/fhir/ValueSet/administrative-gender", + "identifier" : [ + { + "system" : "urn:ietf:rfc:3986", + "value" : "urn:oid:2.16.840.1.113883.4.642.3.1" + } + ], + "version" : "4.0.0", + "name" : "AdministrativeGender", + "title" : "AdministrativeGender", + "status" : "active", + "experimental" : false, + "date" : "2018-12-14T01:14:32+00:00", + "publisher" : "HL7 (FHIR Project)", + "contact" : [ + { + "telecom" : [ + { + "system" : "url", + "value" : "http://hl7.org/fhir" + }, + { + "system" : "email", + "value" : "fhir@lists.hl7.org" + } + ] + } + ], + "description" : "The gender of a person used for administrative purposes.", + "immutable" : true, + "compose" : { + "include" : [ + { + "system" : "http://hl7.org/fhir/administrative-gender" + } + ] + }, + "expansion" : { + "identifier" : "urn:uuid:9758a8b3-f741-40f6-b497-1bb7cd611c09", + "timestamp" : "2020-05-07T17:13:35.193Z", + "parameter" : [ + { + "name" : "expansion-source", + "valueString" : "ValueSet/administrative-gender" + }, + { + "name" : "limitedExpansion", + "valueBoolean" : true + }, + { + "name" : "displayLanguage", + "valueString" : "en-US,en;q=0.9" + }, + { + "name" : "includeDefinition", + "valueBoolean" : true + }, + { + "name" : "version", + "valueString" : "http://hl7.org/fhir/administrative-gender|4.0.0" + } + ], + "contains" : [ + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Male." + } + ], + "system" : "http://hl7.org/fhir/administrative-gender", + "code" : "male", + "display" : "Male" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Female." + } + ], + "system" : "http://hl7.org/fhir/administrative-gender", + "code" : "female", + "display" : "Female" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Other." + } + ], + "system" : "http://hl7.org/fhir/administrative-gender", + "code" : "other", + "display" : "Other" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Unknown." + } + ], + "system" : "http://hl7.org/fhir/administrative-gender", + "code" : "unknown", + "display" : "Unknown" + } + ] + } +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-condition-clinical.json b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-condition-clinical.json new file mode 100644 index 00000000..a3566410 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-condition-clinical.json @@ -0,0 +1,109 @@ +{ + "resourceType": "ValueSet", + "id": "condition-clinical", + "meta": { + "versionId": "1", + "lastUpdated": "2018-12-14T02:04:58.254Z", + "profile": ["http://hl7.org/fhir/StructureDefinition/shareablevalueset"] + }, + "url": "http://hl7.org/fhir/ValueSet/condition-clinical", + "identifier": [ + { + "system": "urn:ietf:rfc:3986", + "value": "urn:oid:2.16.840.1.113883.4.642.3.164" + } + ], + "version": "4.0.0", + "name": "ConditionClinicalStatusCodes", + "title": "Condition Clinical Status Codes", + "status": "draft", + "experimental": false, + "date": "2018-12-14T01:14:32+00:00", + "immutable": true, + "expansion": { + "identifier": "urn:uuid:995a6aa6-0388-41fa-8883-9ecd474dfe67", + "timestamp": "2020-07-22T21:20:14.229Z", + "parameter": [ + { + "name": "expansion-source", + "valueString": "ValueSet/condition-clinical" + }, + { + "name": "displayLanguage", + "valueString": "en-US,en;q=0.9" + }, + { + "name": "version", + "valueString": "http://terminology.hl7.org/CodeSystem/condition-clinical|4.0.0" + } + ], + "contains": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString": "The subject is currently experiencing the symptoms of the condition or there is evidence of the condition." + } + ], + "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", + "code": "active", + "display": "Active" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString": "The subject is experiencing a re-occurence or repeating of a previously resolved condition, e.g. urinary tract infection, pancreatitis, cholangitis, conjunctivitis." + } + ], + "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", + "code": "recurrence", + "display": "Recurrence" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString": "The subject is experiencing a return of a condition, or signs and symptoms after a period of improvement or remission, e.g. relapse of cancer, multiple sclerosis, rheumatoid arthritis, systemic lupus erythematosus, bipolar disorder, [psychotic relapse of] schizophrenia, etc." + } + ], + "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", + "code": "relapse", + "display": "Relapse" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString": "The subject is no longer experiencing the symptoms of the condition or there is no longer evidence of the condition." + } + ], + "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", + "code": "inactive", + "display": "Inactive" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString": "The subject is no longer experiencing the symptoms of the condition, but there is a risk of the symptoms returning." + } + ], + "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", + "code": "remission", + "display": "Remission" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString": "The subject is no longer experiencing the symptoms of the condition and there is a negligible perceived risk of the symptoms returning." + } + ], + "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", + "code": "resolved", + "display": "Resolved" + } + ] + } +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-medicationrequest-status.json b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-medicationrequest-status.json new file mode 100644 index 00000000..fc3b3b47 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-medicationrequest-status.json @@ -0,0 +1,129 @@ +{ + "resourceType" : "ValueSet", + "id" : "medicationrequest-status", + "meta" : { + "versionId" : "1", + "lastUpdated" : "2018-12-14T02:05:08.441Z", + "profile" : [ + "http://hl7.org/fhir/StructureDefinition/shareablevalueset" + ] + }, + "url" : "http://hl7.org/fhir/ValueSet/medicationrequest-status", + "identifier" : [ + { + "system" : "urn:ietf:rfc:3986", + "value" : "urn:oid:2.16.840.1.113883.4.642.3.1320" + } + ], + "version" : "4.0.0", + "name" : "medicationrequest Status", + "title" : "Medicationrequest status", + "status" : "draft", + "experimental" : false, + "date" : "2018-12-14T01:14:32+00:00", + "immutable" : true, + "expansion" : { + "identifier" : "urn:uuid:0c02c1ed-3b53-47f0-9ec6-606d80b544db", + "timestamp" : "2020-07-10T15:03:57.730Z", + "parameter" : [ + { + "name" : "expansion-source", + "valueString" : "ValueSet/medicationrequest-status" + }, + { + "name" : "version", + "valueString" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status|4.0.0" + } + ], + "contains" : [ + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "The prescription is 'actionable', but not all actions that are implied by it have occurred yet." + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "active", + "display" : "Active" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Actions implied by the prescription are to be temporarily halted, but are expected to continue later. May also be called 'suspended'." + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "on-hold", + "display" : "On Hold" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "The prescription has been withdrawn before any administrations have occurred" + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "cancelled", + "display" : "Cancelled" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "All actions that are implied by the prescription have occurred." + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "completed", + "display" : "Completed" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Some of the actions that are implied by the medication request may have occurred. For example, the medication may have been dispensed and the patient may have taken some of the medication. Clinical decision support systems should take this status into account" + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "entered-in-error", + "display" : "Entered in Error" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Actions implied by the prescription are to be permanently halted, before all of the administrations occurred. This should not be used if the original order was entered in error" + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "stopped", + "display" : "Stopped" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "The prescription is not yet 'actionable', e.g. it is a work in progress, requires sign-off, verification or needs to be run through decision support process." + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "draft", + "display" : "Draft" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "The authoring/source system does not know which of the status values currently applies for this observation. Note: This concept is not to be used for 'other' - one of the listed statuses is presumed to apply, but the authoring/source system does not know which." + } + ], + "system" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status", + "code" : "unknown", + "display" : "Unknown" + } + ] + } +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-timing-abbreviation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-timing-abbreviation.json new file mode 100644 index 00000000..d1327edf --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-timing-abbreviation.json @@ -0,0 +1,220 @@ +{ + "resourceType" : "ValueSet", + "id" : "timing-abbreviation", + "meta" : { + "versionId" : "1", + "lastUpdated" : "2018-12-14T02:05:16.722Z", + "profile" : [ + "http://hl7.org/fhir/StructureDefinition/shareablevalueset" + ] + }, + "url" : "http://hl7.org/fhir/ValueSet/timing-abbreviation", + "identifier" : [ + { + "system" : "urn:ietf:rfc:3986", + "value" : "urn:oid:2.16.840.1.113883.4.642.3.78" + } + ], + "version" : "4.0.0", + "name" : "TimingAbbreviation", + "title" : "TimingAbbreviation", + "status" : "draft", + "experimental" : false, + "date" : "2018-12-14T01:14:32+00:00", + "expansion" : { + "identifier" : "urn:uuid:dcd3e054-dc76-4539-ba68-4f1350fb8398", + "timestamp" : "2020-07-08T16:56:06.800Z", + "parameter" : [ + { + "name" : "expansion-source", + "valueString" : "ValueSet/timing-abbreviation" + }, + { + "name" : "displayLanguage", + "valueString" : "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" + }, + { + "name" : "version", + "valueString" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation|2018-08-12" + } + ], + "contains" : [ + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Two times a day at institution specified time" + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "BID", + "display" : "BID" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Three times a day at institution specified time" + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "TID", + "display" : "TID" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Four times a day at institution specified time" + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "QID", + "display" : "QID" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every morning at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "AM", + "display" : "AM" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every afternoon at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "PM", + "display" : "PM" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every day at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "QD", + "display" : "QD" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every other day at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "QOD", + "display" : "QOD" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every hour at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "Q1H", + "display" : "every hour" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every 2 hours at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "Q2H", + "display" : "every 2 hours" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every 3 hours at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "Q3H", + "display" : "every 3 hours" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every 4 hours at institution specified time" + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "Q4H", + "display" : "Q4H" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every 6 hours at institution specified time" + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "Q6H", + "display" : "Q6H" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Every 8 hours at institution specified times." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "Q8H", + "display" : "every 8 hours" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "At bedtime (institution specified time)." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "BED", + "display" : "at bedtime" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Weekly at institution specified time." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "WK", + "display" : "weekly" + }, + { + "extension" : [ + { + "url" : "http://hl7.org/fhir/StructureDefinition/valueset-definition", + "valueString" : "Monthly at institution specified time." + } + ], + "system" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation", + "code" : "MO", + "display" : "monthly" + } + ] + } +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no-unknown-not-asked.json b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no-unknown-not-asked.json new file mode 100644 index 00000000..3afdb824 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no-unknown-not-asked.json @@ -0,0 +1,33 @@ +{ + "resourceType": "ValueSet", + "id": "yes-no-unknown-not-asked", + "url": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked", + "name": "YesNoUnknownNotAsked", + "title": "Yes No Unknown NotAsked", + "status": "active", + "expansion": { + "timestamp": "2020-06-24", + "contains": [ + { + "code": "Y", + "system": "http://terminology.hl7.org/CodeSystem/v2-0532", + "display": "Yes" + }, + { + "code": "N", + "system": "http://terminology.hl7.org/CodeSystem/v2-0532", + "display": "No" + }, + { + "code": "ASKU", + "system": "http://terminology.hl7.org/CodeSystem/v2-0532", + "display": "Unknown" + }, + { + "code": "NASK", + "system": "http://terminology.hl7.org/CodeSystem/v2-0532", + "display": "Not Asked" + } + ] + } +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no.json b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no.json new file mode 100644 index 00000000..8f44c0b8 --- /dev/null +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/ValueSet-R4-yes-no.json @@ -0,0 +1,45 @@ +{ + "resourceType" : "ValueSet", + "id" : "v2-0136", + "meta" : { + "versionId" : "1", + "lastUpdated" : "2018-12-14T02:05:20.722Z", + "profile" : [ + "http://hl7.org/fhir/StructureDefinition/shareablevalueset" + ] + }, + "language" : "en", + "url" : "http://terminology.hl7.org/ValueSet/v2-0136", + "version" : "2.9", + "name" : "v2.0136", + "title" : "v2 Y/N Indicator", + "status" : "active", + "experimental" : false, + "immutable" : true, + "expansion" : { + "identifier" : "urn:uuid:3092e027-c774-4d33-a144-380185b08605", + "timestamp" : "2020-07-17T16:00:03.093Z", + "parameter" : [ + { + "name" : "expansion-source", + "valueString" : "ValueSet/v2-0136" + }, + { + "name" : "version", + "valueString" : "http://terminology.hl7.org/CodeSystem/v2-0136|2.9" + } + ], + "contains" : [ + { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0136", + "code" : "Y", + "display" : "Yes" + }, + { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0136", + "code" : "N", + "display" : "No" + } + ] + } +} diff --git a/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrepopulatiom-0.1.0.cql b/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrepopulatiom-0.1.0.cql new file mode 100644 index 00000000..e69de29b diff --git a/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrescriberEnrollmentPrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrescriberEnrollmentPrepopulation-0.1.0.cql new file mode 100644 index 00000000..a98f2aa5 --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFPrescriberEnrollmentPrepopulation-0.1.0.cql @@ -0,0 +1,51 @@ +library TIRFPrescriberEnrollmentPrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + +codesystem "ICD-10-CM": 'http://hl7.org/fhir/sid/icd-10-cm' +codesystem "LOINC": 'http://loinc.org' +codesystem "SNOMED-CT": 'http://snomed.info/sct' +codesystem "RXNORM": 'http://www.nlm.nih.gov/research/umls/rxnorm' + +code "Oncologist":'394592004' from "SNOMED-CT" + +parameter device_request DeviceRequest +parameter service_request ServiceRequest +parameter medication_request MedicationRequest + +context Patient + +define Today: Today() + +define "SigningProviderReference": Coalesce(device_request.performer.reference.value, service_request.performer.reference.value, medication_request.requester.reference.value) +// Get Practitioner +define OrderingProvider: singleton from ( + [Practitioner] practitioner + where ('Practitioner/' + practitioner.id) = SigningProviderReference) + +define Qualifications: singleton from ( + "OrderingProvider".qualification[0].code.coding[0].code.value) + +define Credentials: {Qualifications} + +define PractitionerRole: singleton from ( + [PractitionerRole] prole + where (prole.practitioner.reference.value) = SigningProviderReference) + +define Specialty: FHIRHelpers.ToConcept("PractitionerRole".specialty[0] as FHIR.CodeableConcept).codes + +define PreferredCommunication: {(singleton from ( + "OrderingProvider".telecom telecom where telecom.rank.value = 1)).system.value} + +define OrgName: ([Organization] org).name.value + +define MD: (singleton from ( + "OrderingProvider".identifier identifier + where identifier.type.coding[0].code = 'MD')).value.value + +define ValidTIRFCredentials: + from "OrderingProvider".qualification qualification + where qualification.identifier.system.value = 'http://www.nlm.nih.gov/research/umls/rxnorm' and qualification.identifier.value.value = '1237051' + +define ThirdPartyCredentials: ValidTIRFCredentials[0].code.text.value +define ThirdPartyIssuer: ValidTIRFCredentials[0].issuer.display.value \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFRule-0.1.0.cql b/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFRule-0.1.0.cql new file mode 100644 index 00000000..ec5dd2ac --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/R4/files/TIRFRule-0.1.0.cql @@ -0,0 +1,44 @@ +library TIRFRule version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + + +parameter Patient Patient +parameter medication_request MedicationRequest +parameter medication_dispense MedicationDispense +parameter medication_statement MedicationStatement + +define RULE_APPLIES: + true + +define PRIORAUTH_REQUIRED: + false + +define DOCUMENTATION_REQUIRED: + true + +define RESULT_InfoLink: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_REMS_Document.pdf' +define INFO_PATIENT_PatientCounselingGuide: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Patient_Counseling_Guide.pdf' +define INFO_PATIENT_PatientFAQ: + 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-patientfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A21Z&ske=2022-09-26T19%3A11%3A21Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A27%3A00Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=owSGAoUBZuCtsLE41F2XC3o12x%2BG%2Bt5ogykOIt796es%3D' +define INFO_PRESCRIBER_PrescriberEducation: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Prescriber_Education.pdf' +define INFO_PRESCRIBER_PrescriberFAQ: + 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-prfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A53Z&ske=2022-09-26T19%3A11%3A53Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A35%3A43Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=fqtDzsm7qi1G8MKau210Y3gNet%2Fi20zw2EThKODdEUM%3D' + +define RESULT_QuestionnaireOrderUri: + 'Questionnaire/TIRFRemsPatientEnrollment' + +define RESULT_QuestionnairePrescriberEnrollmentUri: + 'Questionnaire/TIRFPrescriberEnrollmentForm' + +define RESULT_QuestionnairePrescriberKnowledgeAssessmentUri: + 'Questionnaire/TIRFPrescriberKnowledgeAssessment' + +define RESULT_requestId: + medication_request + +define RESULT_dispense: + medication_dispense \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json new file mode 100644 index 00000000..12da16a3 --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json @@ -0,0 +1,113 @@ +{ + "resourceType": "Library", + "id": "TIRFPrescriberEnrollment-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/TIRFPrescriberEnrollment-prepopulation", + "name": "TIRFPrescriberEnrollment-prepopulation", + "version": "0.1.0", + "title": "TIRFPrescriberEnrollment Prepopulation", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + }, + { + "type": "depends-on", + "resource": "Library/CDS_Connect_Commons_for_FHIRv400" + }, + { + "type": "depends-on", + "resource": "Library/DTRHelpers" + } + ], + "dataRequirement": [ + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.81" + } + ] + }, + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.198" + } + ] + }, + { + "type": "Procedure", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.90" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.192" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.193" + } + ] + }, + { + "type": "Observation" + }, + { + "type": "MedicationStatement", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197" + } + ] + }, + { + "type": "Practitioner" + }, + { + "type": "PractitionerRole", + "subjectCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/ValueSet/subject-type", + "code": "Practitioner" + } + ] + } + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBUSVJGUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uICB2ZXJzaW9uICcwLjEuMCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMCcKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgpjb2Rlc3lzdGVtICJJQ0QtMTAtQ00iOiAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtJwpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJwpjb2Rlc3lzdGVtICJTTk9NRUQtQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKY29kZXN5c3RlbSAiUlhOT1JNIjogJ2h0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0nCgpjb2RlICJPbmNvbG9naXN0IjonMzk0NTkyMDA0JyBmcm9tICJTTk9NRUQtQ1QiCgpwYXJhbWV0ZXIgZGV2aWNlX3JlcXVlc3QgRGV2aWNlUmVxdWVzdApwYXJhbWV0ZXIgc2VydmljZV9yZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0CnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lIFRvZGF5OiBUb2RheSgpCgpkZWZpbmUgIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSI6IENvYWxlc2NlKGRldmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIHNlcnZpY2VfcmVxdWVzdC5wZXJmb3JtZXIucmVmZXJlbmNlLnZhbHVlLCBtZWRpY2F0aW9uX3JlcXVlc3QucmVxdWVzdGVyLnJlZmVyZW5jZS52YWx1ZSkKLy8gR2V0IFByYWN0aXRpb25lcgpkZWZpbmUgT3JkZXJpbmdQcm92aWRlcjogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJdIHByYWN0aXRpb25lcgogICAgd2hlcmUgKCdQcmFjdGl0aW9uZXIvJyArIHByYWN0aXRpb25lci5pZCkgPSAgU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKZGVmaW5lIFF1YWxpZmljYXRpb25zOiBzaW5nbGV0b24gZnJvbSAoCiAgICAiT3JkZXJpbmdQcm92aWRlciIucXVhbGlmaWNhdGlvblswXS5jb2RlLmNvZGluZ1swXS5jb2RlLnZhbHVlKQoKZGVmaW5lIENyZWRlbnRpYWxzOiB7UXVhbGlmaWNhdGlvbnN9CgpkZWZpbmUgUHJhY3RpdGlvbmVyUm9sZTogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJSb2xlXSBwcm9sZQogICAgd2hlcmUgKHByb2xlLnByYWN0aXRpb25lci5yZWZlcmVuY2UudmFsdWUpID0gU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKZGVmaW5lIFNwZWNpYWx0eTogIEZISVJIZWxwZXJzLlRvQ29uY2VwdCgiUHJhY3RpdGlvbmVyUm9sZSIuc3BlY2lhbHR5WzBdIGFzIEZISVIuQ29kZWFibGVDb25jZXB0KS5jb2RlcwoKZGVmaW5lIFByZWZlcnJlZENvbW11bmljYXRpb246IHsoc2luZ2xldG9uIGZyb20gKAogICJPcmRlcmluZ1Byb3ZpZGVyIi50ZWxlY29tIHRlbGVjb20gd2hlcmUgdGVsZWNvbS5yYW5rLnZhbHVlID0gMSkpLnN5c3RlbS52YWx1ZX0KCmRlZmluZSBPcmdOYW1lOiAoW09yZ2FuaXphdGlvbl0gb3JnKS5uYW1lLnZhbHVlCgpkZWZpbmUgTUQ6IChzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLmlkZW50aWZpZXIgaWRlbnRpZmllcgogICAgd2hlcmUgaWRlbnRpZmllci50eXBlLmNvZGluZ1swXS5jb2RlID0gJ01EJykpLnZhbHVlLnZhbHVlCgpkZWZpbmUgVmFsaWRUSVJGQ3JlZGVudGlhbHM6IAogIGZyb20gIk9yZGVyaW5nUHJvdmlkZXIiLnF1YWxpZmljYXRpb24gcXVhbGlmaWNhdGlvbiAKICAgIHdoZXJlIHF1YWxpZmljYXRpb24uaWRlbnRpZmllci5zeXN0ZW0udmFsdWUgPSAnaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybScgYW5kIHF1YWxpZmljYXRpb24uaWRlbnRpZmllci52YWx1ZS52YWx1ZSA9ICcxMjM3MDUxJwoKZGVmaW5lIFRoaXJkUGFydHlDcmVkZW50aWFsczogVmFsaWRUSVJGQ3JlZGVudGlhbHNbMF0uY29kZS50ZXh0LnZhbHVlCmRlZmluZSBUaGlyZFBhcnR5SXNzdWVyOiBWYWxpZFRJUkZDcmVkZW50aWFsc1swXS5pc3N1ZXIuZGlzcGxheS52YWx1ZQ==" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiVElSRlByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjIwLCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MjAsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUSVJGUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MjAsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoyMCwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjo0MywiZW5kTGluZSI6NDgsImVuZENoYXIiOjQ3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjoxMzIsImVuZExpbmUiOjQ4LCJlbmRDaGFyIjoxMzYsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJ2ZXJzaW9uIjoiMC4xLjAifSwic2NoZW1hSWRlbnRpZmllciI6eyJpZCI6InVybjpobDctb3JnOmVsbSIsInZlcnNpb24iOiJyMSJ9LCJ1c2luZ3MiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJTeXN0ZW0iLCJ1cmkiOiJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEifSx7ImxvY2FsSWRlbnRpZmllciI6IkZISVIiLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwiaW5jbHVkZXMiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJGSElSSGVscGVycyIsInBhdGgiOiJGSElSSGVscGVycyIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInBhcmFtZXRlcnMiOnsiZGVmIjpbeyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6Im1lZGljYXRpb25fcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6Ik9uY29sb2dpc3QiLCJpZCI6IjM5NDU5MjAwNCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiU05PTUVELUNUIn19XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6IlF1YWxpZmljYXRpb25zIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sibmFtZSI6IlF1YWxpZmljYXRpb25zIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJQcmFjdGl0aW9uZXJSb2xlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJwcm9sZSIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InByYWN0aXRpb25lciIsInNjb3BlIjoicHJvbGUiLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6IlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJTcGVjaWFsdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZXMiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InNwZWNpYWx0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUHJhY3RpdGlvbmVyUm9sZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19LHsibmFtZSI6IlByZWZlcnJlZENvbW11bmljYXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoidGVsZWNvbSIsImV4cHJlc3Npb24iOnsicGF0aCI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJhbmsiLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19XX19LHsibmFtZSI6Ik9yZ05hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im9yZyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdfX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7Im5hbWUiOiJNRCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InR5cGUiLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiTUQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJWYWxpZFRJUkZDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJxdWFsaWZpY2F0aW9uIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIxMjM3MDUxIiwidHlwZSI6IkxpdGVyYWwifV19XX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUSVJGQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5SXNzdWVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJkaXNwbGF5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJpc3N1ZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUSVJGQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fV19fX0=" + } + ] + } \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment-TIRF.json b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment-TIRF.json new file mode 100644 index 00000000..600bca2e --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment-TIRF.json @@ -0,0 +1,378 @@ +{ + "resourceType": "Questionnaire", + "id": "TIRFPrescriberKnowledgeAssessment", + "name": "TIRFPrescriberKnowledgeAssessment", + "title": "TIRF REMS Prescriber Knowledge Assessment", + "status": "draft", + "subjectType": [ + "Prescriber" + ], + "date": "2022-05-28", + "publisher": "FDA-REMS", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPractitionerInfo-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "1.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/practitioner-info-base" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire-expand", + "valueBoolean": true + } + ], + "type": "display" + }, + { + "linkId": "1.2", + "text": "Address", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "1.3", + "text": "City", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "1.4", + "text": "State", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "1.5", + "text": "Zip", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "1.6", + "text": "Phone", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "1.7", + "text": "Ext", + "type": "string", + "required": false + }, + { + "linkId": "1.8", + "text": "Fax", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Fax" + } + } + ] + }, + { + "linkId": "1.9", + "text": "Email Address", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Knowledge Assessment", + "item": [ + { + "linkId": "2.1.1", + "type": "choice", + "text": "1. The patients described are all experiencing breakthrough cancer pain, but ONE is not an appropriate patient for a TIRF medicine. Which patient should not receive a TIRF medicine? Select one option", + "answerOption": [ + { + "valueString": "12-year-old sarcoma patient, using transdermal fentanyl for her underlying persistent cancer pain" + }, + { + "valueString": "Adult female with advanced breast cancer; on 60 mg of oral morphine daily for the past 4 weeks" + }, + { + "valueString": "Adult male with advanced lung cancer, his underlying persistent pain is managed with 25 mcg/hour transdermal fentanyl patches for the past 3 months" + }, + { + "valueString": "Adult male with multiple myeloma who has bone pain currently managed with 50 mg oral oxymorphone daily for the last 2 weeks" + } + ] + }, + { + "linkId": "2.1.2", + "type": "choice", + "text": "2. The patients described are experiencing breakthrough cancer pain. A TIRF medicine is NOT appropriate for one of them. Which patient should not receive a TIRF medicine? Select one option", + "answerOption": [ + { + "valueString": "Adult male with advanced lung cancer; underlying persistent cancer pain managed with 25 mcg/hour transdermal fentanyl patches for the past 2 months" + }, + { + "valueString": "Adult female with localized breast cancer; just completed a mastectomy and reconstructive surgery; persistent cancer pain managed with 30 mg oral morphine daily for the past 6 weeks" + }, + { + "valueString": "Adult male patient with advanced prostate cancer who, over the last 2 weeks, has been prescribed 100 mg oral morphine daily for pain due to bone metastasis" + }, + { + "valueString": "Adult female with advanced sarcoma who has been taking a daily dose of 12 mg oral hydromorphone for the last 3 weeks" + } + ] + }, + { + "linkId": "2.1.3", + "type": "choice", + "text": "3. Certain factors may increase the risk of abuse and/or diversion of opioid medications. Which of the following is most accurate? Select one option", + "answerOption": [ + { + "valueString": "A history of alcohol abuse with the patient or close family members" + }, + { + "valueString": "The patient has a household member with a street drug abuse problem" + }, + { + "valueString": "The patient has a history of prescription drug misuse" + }, + { + "valueString": "All of the above" + } + ] + }, + { + "linkId": "2.1.4", + "type": "choice", + "text": "4. A patient is already taking a TIRF medicine but wants to change their medicine. His/her doctor decides to prescribe a different TIRF medicine (that is not a bioequivalent generic version of a branded product) in its place. How should the prescriber proceed? Select one option", + "answerOption": [ + { + "valueString": "The prescriber can safely convert to the equivalent dosage of the new TIRF medicine as it has the same effect as other TIRF medicines" + }, + { + "valueString": "The prescriber must not convert from the first TIRF medicine dose to another TIRF medicine at the equivalent dose. The different TIRF medicines have different absorption and bioavailability profiles, and conversion to an equivalent dose of a second TIRF product could result in a fentanyl overdose" + }, + { + "valueString": "Convert from the other TIRF medicine to the new TIRF medicine at half of the dose" + }, + { + "valueString": "The prescriber should base the starting dose of the newly prescribed TIRF medicine on the dose of the opioid medicine used for their underlying persistent cancer pain" + } + ] + }, + { + "linkId": "2.1.5", + "type": "choice", + "text": "5. A patient is starting titration with a TIRF medicine. What dose must they start with? Select one option", + "answerOption": [ + { + "valueString": "An appropriate dose based on the dose of the opioid medicine used for underlying persistent cancer pain" + }, + { + "valueString": "The dose that the prescriber believes is appropriate based on their clinical experience" + }, + { + "valueString": "The lowest available dose, unless individual product Prescribing Information provides product-specific guidance" + }, + { + "valueString": "The median available dose" + } + ] + }, + { + "linkId": "2.1.6", + "type": "choice", + "text": "6. A prescriber has started titrating a patient with the lowest dose of a TIRF medicine. However, after 30 minutes, the breakthrough cancer pain has not been sufficiently relieved. What should they advise the patient to do? Select one option", + "answerOption": [ + { + "valueString": "Take another (identical) dose of the TIRF medicine immediately" + }, + { + "valueString": "Take a dose of an alternative rescue medicine" + }, + { + "valueString": "Provide guidance based on the product-specific Prescribing Information because the instructions are not the same for all TIRF medicines" + }, + { + "valueString": "Double the dose and take immediately" + } + ] + }, + { + "linkId": "2.1.7", + "type": "choice", + "text": "7. A patient is taking a TIRF medicine and the doctor would like to prescribe erythromycin, a CYP3A4 inhibitor. Which of the following statements is TRUE? Select one option", + "answerOption": [ + { + "valueString": "The patient can’t be prescribed erythromycin, because using it at the same time as a TIRF medicine could be fatal" + }, + { + "valueString": "Use of a TIRF medicine with a CYP3A4 inhibitor may require dosage adjustment of the TIRF medicine; carefully monitor the patient for opioid toxicity, otherwise such use may cause serious life threatening, and/or fatal respiratory depression" + }, + { + "valueString": "There is no possible drug interaction between CYP3A4 inhibitors and TIRF medicines" + }, + { + "valueString": "The dose of the TIRF medicine must be reduced by one half if a CYP3A4 inhibitor is prescribed in the same patient" + } + ] + }, + { + "linkId": "2.1.8", + "type": "choice", + "text": "8. Before initiating treatment with a TIRF medicine, prescribers must review the Medication Guide and Patient Counseling Guide with the patient. Which of the following counseling statements is FALSE? Select one option", + "answerOption": [ + { + "valueString": "TIRF medicines contain fentanyl in an amount that could be fatal to children of all ages, in individuals for whom they were not prescribed, and in those who are not opioid tolerant" + }, + { + "valueString": "Inform patients that TIRF medicines must not be used to treat acute or postoperative pain, including headache/migraine, dental pain or acute pain in the emergency department" + }, + { + "valueString": "Instruct patients that, if they stop taking their around-the-clock opioid medicine, they can continue to take their TIRF medicine" + }, + { + "valueString": "Instruct patients to never share their TIRF medicine with anyone else, even if that person has the same symptoms" + } + ] + }, + { + "linkId": "2.1.9", + "type": "choice", + "text": "9. There is a risk of fatal overdose with inappropriate use of TIRF medicines. Which one of the following answers is most accurate? Select one option", + "answerOption": [ + { + "valueString": "TIRF medicines can be fatal if taken by children" + }, + { + "valueString": "TIRF medicines can be fatal if taken by anyone for whom it is not prescribed" + }, + { + "valueString": "TIRF medicines can be fatal if taken by anyone who is not opioid-tolerant" + }, + { + "valueString": "All of the above" + } + ] + }, + { + "linkId": "2.1.10", + "type": "choice", + "text": "10. Which one of the following statements is most accurate regarding the safe storage and disposal of TIRF medicines? Select one option", + "answerOption": [ + { + "valueString": "TIRF medicines should be kept in in a safe and secure place, out of sight and out of reach of all others, especially children" + }, + { + "valueString": "TIRF medicines should be protected from theft" + }, + { + "valueString": "Dispose of partially used or unneeded TIRF medicine by following the TIRF medicine-specific procedure specified in the Medication Guide" + }, + { + "valueString": "All of the above" + } + ] + }, + { + "linkId": "2.1.11", + "type": "choice", + "text": "11. Which of the following statements is FALSE? Select one option", + "answerOption": [ + { + "valueString": "The TIRF REMS mitigates the risk of overdose by: Educating prescribers, pharmacist and patients that respiratory depression is more common in patients who are not opioid tolerant" + }, + { + "valueString": "The TIRF REMS mitigates the risk of overdose by: Requiring that patients remain opioid-tolerant throughout their treatment with TIRF medicines" + }, + { + "valueString": "The TIRF REMS mitigates the risk of overdose by: Requiring inpatient pharmacies to verify opioid tolerance in inpatients who require TIRF medicine while hospitalized" + }, + { + "valueString": "The TIRF REMS mitigates the risk of overdose by: Requiring documentation of opioid tolerance with only the initial prescription of a TIRF medicine" + } + ] + }, + { + "linkId": "2.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/provider-signature" + } + ], + "type": "display" + } + ] + } + ] +} diff --git a/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-PrescriberEnrollment-TIRF.json b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-PrescriberEnrollment-TIRF.json new file mode 100644 index 00000000..5bd192ca --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-PrescriberEnrollment-TIRF.json @@ -0,0 +1,425 @@ +{ + "resourceType": "Questionnaire", + "id": "TIRFPrescriberEnrollmentForm", + "name": "TIRFPrescriberEnrollmentForm", + "title": "TIRF REMS Prescriber Enrollment Form", + "status": "draft", + "subjectType": [ + "Practitioner" + ], + "date": "2022-05-28", + "publisher": "FDA-REMS", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/TIRFPrescriberEnrollment-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "1.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/practitioner-info-base" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire-expand", + "valueBoolean": true + } + ], + "type": "display" + }, + { + "linkId": "1.2", + "text": "Clinic/Practice Name", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TIRFPrescriberEnrollmentPrepopulation\".OrgName" + } + } + ] + }, + { + "linkId": "1.3", + "text": "Specialty", + "type": "open-choice", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TIRFPrescriberEnrollmentPrepopulation\".Specialty" + } + } + ] + }, + { + "linkId": "1.4", + "text": "Credentials", + "type": "open-choice", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TIRFPrescriberEnrollmentPrepopulation\".Credentials" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "MD", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "MD" + } + }, + { + "valueCoding": { + "code": "NP", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "NP" + } + }, + { + "valueCoding": { + "code": "PA", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "PA" + } + }, + { + "valueCoding": { + "code": "DO", + "system": "http://terminology.hl7.org/CodeSystem/v2-0360|2.7", + "display": "DO" + } + }, + { + "valueCoding": { + "code": "Other", + "display": "Other" + } + } + ] + }, + { + "linkId": "1.5", + "text": "Address", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "1.6", + "text": "City", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "1.7", + "text": "State", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "1.8", + "text": "Zip", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "1.9", + "text": "Phone", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "1.10", + "text": "Ext", + "type": "string", + "required": false + }, + { + "linkId": "1.11", + "text": "Fax", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Fax" + } + } + ] + }, + { + "linkId": "1.12", + "text": "Email Address", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + }, + { + "linkId": "1.13", + "text": "Preferred Time of Contact", + "type": "choice", + "required": false, + "answerOption": [ + { + "valueString": "Morning" + }, + { + "valueString": "Afternoon" + }, + { + "valueString": "Evening" + } + ] + }, + { + "linkId": "1.14", + "text": "Preferred Method of Contact", + "type": "open-choice", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TIRFPrescriberEnrollmentPrepopulation\".PreferredCommunication" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "sms", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Text to Mobile #" + } + }, + { + "valueCoding": { + "code": "email", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Email" + } + }, + { + "valueCoding": { + "code": "phone", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Phone Call" + } + } + ] + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Office Contact Information", + "item": [ + { + "linkId": "2.1", + "text": "First and Last Name", + "type": "string", + "required": false + }, + { + "linkId": "2.2", + "text": "Phone", + "type": "string", + "required": false + }, + { + "linkId": "2.3", + "text": "Fax", + "type": "string", + "required": false + }, + { + "linkId": "2.4", + "text": "Email Address", + "type": "string", + "required": false + }, + { + "linkId": "2.5", + "text": "Preferred Time of Contact", + "type": "choice", + "required": false, + "answerOption": [ + { + "valueString": "Morning" + }, + { + "valueString": "Afternoon" + }, + { + "valueString": "Evening" + } + ] + }, + { + "linkId": "2.6", + "text": "Preferred Method of Contact", + "type": "choice", + "required": false, + "answerOption": [ + { + "valueCoding": { + "code": "sms", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Text to Mobile #" + } + }, + { + "valueCoding": { + "code": "email", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Email" + } + }, + { + "valueCoding": { + "code": "phone", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Phone Call" + } + } + ] + } + ] + }, + { + "linkId": "3", + "type": "group", + "text": "Prescriber Certification (if applicable)", + "item": [ + { + "linkId": "3.1", + "text": "Prescriber Certification Type", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TIRFPrescriberEnrollmentPrepopulation\".ThirdPartyCredentials" + } + } + ] + }, + { + "linkId": "3.2", + "text": "Prescriber Certification Issuer", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TIRFPrescriberEnrollmentPrepopulation\".ThirdPartyIssuer" + } + } + ] + } + ] + }, + { + "linkId": "4", + "type": "group", + "text": "Prescriber Attestation", + "item": [ + { + "linkId": "4.1", + "text": "By signing below, you attest to the following: I have: • Reviewed each drug's Prescribing Information • Reviewed the Prescriber Education • Successfully completed the Prescriber Knowledge Assessment and submitted it to the REMS. Before treatment initiation, I must: • Assess the patient for risk factors of opioid addition, abuse, and misuse including personal and family history of substance abuse or mental illness • Counsel the patient on the safe use of TIRF medicines using the Medication Guide for the prescribed TIRF medicine and the Patient Counseling Guide • Provide a copy of the materials to the patient • Assess the patient's opioid tolerance • Document the patient's opioid tolerance using the Patient Enrollment Form and submit to the REMS • Enroll the patient by completing and submitting the Patient Enrollment Form to the TIRF REMS. During treatment, and before each prescription, I must: • Assess the patient's health status for opioid tolerance, appropriateness of dose, misuse, abuse, addiction, and overdose • Document and submit this information to the REMS using the Patient Status and Opioid Tolerance Form. During treatment, every 2 years, I must: • Counsel the patient on the safe use of TIRF medicines using the Medication Guide for the prescribed TIRF medicine, and the Patient Counseling Guide • Provide a copy of the materials to the patient • Re-enroll the patient in the REMS by completing the Patient Enrollment Form and submitting it to the REMS. Before treatment re-initiation, after a lapse in treatment of 6 months or longer, I must: • Counsel the Patient on the safe use of TIRF medicines using the Medication Guide for the prescribed TIRF medicine and the Patient Counseling Guide • Provide a copy of the materials to the patient. At all times, I must: • Counsel the patient using the Medication Guide for any new TIRF medicine not previously prescribed and provide a copy to the patient • Report serious adverse events of accidental exposure, misuse, abuse, addiction, and overdose to the REMS using the Adverse Events of Special Interest Reporting Form • Report treatment discontinuation to the REMS using the Patient Discontinuation Form. To maintain certification to prescribe, every 2 years, I must: • Review each drug's Prescribing Information • Review the Prescriber Education • Successfully complete the Prescriber Knowledge Assessment and submit it to the REMS • Re-enroll in the REMS by completing the Prescriber Enrollment Form", + "type": "display", + "readOnly": true + }, + { + "linkId": "4.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/provider-signature" + } + ], + "type": "display" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json new file mode 100644 index 00000000..2afb8463 --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json @@ -0,0 +1,814 @@ +{ + "resourceType": "Questionnaire", + "id": "TIRFRemsPatientEnrollment", + "name": "TIRFRemsPatientEnrollment", + "title": "TIRF Rems Patient Enrollment", + "status": "draft", + "subjectType": [ + "Patient" + ], + "date": "2020-05-20", + "publisher": "Da Vinci DTR", + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Patient Information", + "item": [ + { + "linkId": "1.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/patient-info-base" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire-expand", + "valueBoolean": true + } + ], + "type": "display" + }, + { + "linkId": "1.2", + "text": "Race", + "type": "open-choice", + "required": false, + "repeats": true, + "answerOption": [ + { + "valueCoding": { + "code": "White", + "display": "White" + } + }, + { + "valueCoding": { + "code": "Asian", + "display": "Asian" + } + }, + { + "valueCoding": { + "code": "Black or African American", + "display": "Black or African American" + } + }, + { + "valueCoding": { + "code": "American Indian or Alaskan Native", + "display": "American Indian or Alaskan Native" + } + }, + { + "valueCoding": { + "code": "Native Hawaiian or Other Pacific Islander", + "display": "Native Hawaiian or Other Pacific Islander" + } + } + ] + }, + { + "linkId": "1.3", + "text": "Ethnicity", + "type": "group", + "required": true, + "item": [ + { + "linkId": "1.3.1", + "text": "Are you Hispanic or Latino?", + "type": "boolean" + } + ] + }, + { + "linkId": "1.4", + "text": "Address", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "1.5", + "text": "City", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "1.6", + "text": "State", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "1.7", + "text": "Zip", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "1.8", + "text": "Phone", + "type": "string", + "required": true + }, + { + "linkId": "1.9", + "text": "Email Address", + "type": "string", + "required": true + }, + { + "linkId": "1.10", + "text": "Preferred Time of Contact", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueString": "Morning" + }, + { + "valueString": "Afternoon" + }, + { + "valueString": "Evening" + } + ] + }, + { + "linkId": "1.11", + "text": "Preferred Method of Contact", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueCoding": { + "code": "sms", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Text to Mobile #" + } + }, + { + "valueCoding": { + "code": "email", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Email" + } + }, + { + "valueCoding": { + "code": "phone", + "system": "http://hl7.org/fhir/contact-point-system", + "display": "Phone Call" + } + }, + { + "valueCoding": { + "code": "other", + "system": "http://hl7.org/fhir/ValueSet/contact-point-system", + "display": "Postal Mail" + } + } + ] + }, + { + "linkId": "1.12", + "text": "Is there a child in the home or are you a caregiver of small children?", + "type": "boolean", + "required": true + }, + { + "linkId": "1.13", + "text": "Do you have a safe and secure place to store your medicine?", + "type": "boolean", + "required": true + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Patient Representative (if required)", + "item": [ + { + "linkId": "2.1", + "text": "First Name", + "type": "string", + "required": true + }, + { + "linkId": "2.2", + "text": "Last Name", + "type": "string", + "required": true + }, + { + "linkId": "2.3", + "text": "Relationship to Patient", + "type": "string", + "required": true + }, + { + "linkId": "2.4", + "text": "Phone", + "type": "string", + "required": true + }, + { + "linkId": "2.5", + "text": "Email Address", + "type": "string", + "required": true + } + ] + }, + { + "linkId": "3", + "type": "group", + "text": "Patient Attestation", + "item": [ + { + "linkId": "3.1", + "text": "TIRF Medicines can cause your breathing to stop - which can lead to death. Safety Rules for TIRF Medicines You have agreed to take a TIRF Medicine and to follow all the safety rules to make it less likely you or others will experience serious harm • My healthcare provider has talked to me about the safe use of TIRF medicines using the Medication Guide and Patient Counseling Guide • I will only use this medicine if I am regularly using another opioid, around-the-clock, for constant pain • If I stop taking my around-the-clock-opioid pain medicine, I MUST stop taking my TIRF medicine • I will never share or give my TIRF medicine to anyone else, even if they have the same symptoms • My TIRF medicine could cause harm to others or even death. A dose that is okay for me could cause an overdose and death for someone else • I will store my TIRF medicine in a safe and secure place away from children. I understand that accidental use by a child, or anyone for whom the medicine was not prescribed, can cause death • I have been told how to properly dispose of my partially used or unneeded TIRF medicine remaining from my prescription. I will dispose of my TIRF medicine properly as soon as I no longer need it • I will contact my healthcare provider if my TIRF medicine does not relieve my pain. I will not change the dose of my TIRF medicine myself or take it more often than my healthcare provider has directed • I must enroll in the TIRF REMS and Patient Registry by completing the Patient Enrollment Form with my healthcare provider • I understand that the TIRF REMS and its agents may use and share my personal information to manage the program, and that information about patients who get TIRF medicines will be stored in a private and secure database. My health information may be shared with the U.S. Food and Drug Administration (FDA) to evaluate the TIRF REMS. However, my name will not be shared • I give permission for the TIRF REMS and its agents or vendors to contact me by phone, mail, or email to support the administration of the TIRF REMS Program • I will tell my healthcare provider if I, or anyone else, experience an adverse event of accidental exposure, abuse, misuse, addiction, and overdose • I will re-enroll in the TIRF REMS by completing the Patient Enrollment Form with my healthcare provider every two years during treatment.", + "type": "display", + "readOnly": true + }, + { + "linkId": "3.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/patient-signature" + } + ], + "type": "display" + } + ] + }, + { + "linkId": "4", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "4.1", + "text": "First Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FirstName" + } + } + ] + }, + { + "linkId": "4.2", + "text": "Last Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".LastName" + } + } + ] + }, + { + "linkId": "4.3", + "text": "Address", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "4.4", + "text": "City", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "4.5", + "text": "State", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "4.6", + "text": "Zip", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "4.7", + "text": "Phone", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "4.8", + "text": "Fax", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Fax" + } + } + ] + }, + { + "linkId": "4.9", + "text": "Individual NPI #", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".NPI" + } + } + ] + }, + { + "linkId": "4.10", + "text": "Email Address", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + } + ] + }, + { + "linkId": "5", + "type": "group", + "text": "Medical Information", + "item": [ + { + "linkId": "5.1", + "text": "Prior TIRF Use within the last 6 months", + "type": "boolean", + "required": true + }, + { + "linkId": "5.2", + "text": "TIRF Product Name", + "type": "string", + "required": true + }, + { + "linkId": "5.3", + "text": "Strength", + "type": "string", + "required": true + }, + { + "linkId": "5.4", + "text": "Dose", + "type": "string", + "required": true + }, + { + "linkId": "5.5", + "text": "Frequency", + "type": "string", + "required": true + }, + { + "linkId": "5.6", + "text": "Type of Pain", + "type": "choice", + "required": true, + "answerOption": [ + { + "valueCoding": { + "code": "Cancer", + "display": "Cancer" + } + }, + { + "valueCoding": { + "code": "Non-cancer Pain", + "display": "Non-cancer Pain" + } + } + ] + } + ] + }, + { + "linkId": "6", + "type": "group", + "text": "Verify Opioid Tolerance", + "required": true, + "item": [ + { + "linkId": "6.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item": [ + { + "linkId": "6.1.1", + "text": "Moiety", + "type": "string", + "required": true + }, + { + "linkId": "6.1.2", + "text": "Formulation", + "type": "string", + "required": true + }, + { + "linkId": "6.1.3", + "text": "Strength", + "type": "string", + "required": true + }, + { + "linkId": "6.1.4", + "text": "Route", + "type": "string", + "required": true + }, + { + "linkId": "6.1.5", + "text": "Dose", + "type": "string", + "required": true + }, + { + "linkId": "6.1.6", + "text": "Frequency", + "type": "string", + "required": true + } + ] + }, + { + "linkId": "6.2", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item": [ + { + "linkId": "6.2.1", + "text": "Moiety", + "type": "string" + }, + { + "linkId": "6.2.2", + "text": "Formulation", + "type": "string" + }, + { + "linkId": "6.2.3", + "text": "Strength", + "type": "string" + }, + { + "linkId": "6.2.4", + "text": "Route", + "type": "string" + }, + { + "linkId": "6.2.5", + "text": "Dose", + "type": "string" + }, + { + "linkId": "6.2.6", + "text": "Frequency", + "type": "string" + } + ] + }, + { + "linkId": "6.3", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item": [ + { + "linkId": "6.3.1", + "text": "Moiety", + "type": "string" + }, + { + "linkId": "6.3.2", + "text": "Formulation", + "type": "string" + }, + { + "linkId": "6.3.3", + "text": "Strength", + "type": "string" + }, + { + "linkId": "6.3.4", + "text": "Route", + "type": "string" + }, + { + "linkId": "6.3.5", + "text": "Dose", + "type": "string" + }, + { + "linkId": "6.3.6", + "text": "Frequency", + "type": "string" + } + ] + }, + { + "linkId": "6.4", + "text": "Patients must remain on around-the-clock opioids while taking a TIRF medicine. This patient is opioid tolerant because he/she is currently prescribed (exclusive of a TIRF medicine) one or more of the following opioid regimens daily and has been prescribed this regimen(s) for one week or longer (check all that apply)", + "type": "choice", + "required": true, + "repeats": true, + "answerOption": [ + { + "valueCoding": { + "code": "≥ 60 mg oral morphine/day", + "display": "≥ 60 mg oral morphine/day" + } + }, + { + "valueCoding": { + "code": "≥ 25 micrograms transdermal fentanyl/hour", + "display": "≥ 25 micrograms transdermal fentanyl/hour" + } + }, + { + "valueCoding": { + "code": "≥ 30 mg oral oxycodone/day", + "display": "≥ 30 mg oral oxycodone/day" + } + }, + { + "valueCoding": { + "code": "≥ 8 mg oral hydromorphone/day", + "display": "≥ 8 mg oral hydromorphone/day" + } + }, + { + "valueCoding": { + "code": "≥ 25 mg oral oxymorphone/day", + "display": "≥ 25 mg oral oxymorphone/day" + } + }, + { + "valueCoding": { + "code": "≥ 60 mg oral hydrocodone/day", + "display": "≥ 60 mg oral hydrocodone/day" + } + }, + { + "valueCoding": { + "code": "an equianalgesic dose of another opioid", + "display": "an equianalgesic dose of another opioid" + } + } + ] + } + ] + }, + { + "linkId": "7", + "type": "group", + "text": "Concomitant Medications", + "item": [ + { + "linkId": "7.1", + "text": "Concomitant Medications (check all that apply)", + "type": "choice", + "required": true, + "repeats": true, + "answerOption": [ + { + "valueCoding": { + "code": "Benzodiazepines", + "display": "Benzodiazepines" + } + }, + { + "valueCoding": { + "code": "Gabapentinoids", + "display": "Gabapentinoids" + } + }, + { + "valueCoding": { + "code": "Sedative Hypnotics", + "display": "Sedative Hypnotics" + } + }, + { + "valueCoding": { + "code": "Tranquilizers", + "display": "Tranquilizers" + } + }, + { + "valueCoding": { + "code": "Muscle Relaxants", + "display": "Muscle Relaxants" + } + }, + { + "valueCoding": { + "code": "Barbiturates", + "display": "Barbiturates" + } + }, + { + "valueCoding": { + "code": "Antipsychotics", + "display": "Antipsychotics" + } + }, + { + "valueCoding": { + "code": "Sodium Oxybate", + "display": "Sodium Oxybate" + } + }, + { + "valueCoding": { + "code": "Alcohol", + "display": "Alcohol" + } + }, + { + "valueCoding": { + "code": "Prescription Cannabinoids", + "display": "Prescription Cannabinoids" + } + }, + { + "valueCoding": { + "code": "Prescription Insomnia Medications", + "display": "Prescription Insomnia Medications" + } + }, + { + "valueCoding": { + "code": "Other CNS depressant", + "display": "Other CNS depressant" + } + }, + { + "valueCoding": { + "code": "None", + "display": "None" + } + } + ] + }, + { + "linkId": "7.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/provider-signature" + } + ], + "type": "display" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/TIRF/TopicMetadata.json b/src/cds-library/CRD-DTR/TIRF/TopicMetadata.json new file mode 100644 index 00000000..700f4061 --- /dev/null +++ b/src/cds-library/CRD-DTR/TIRF/TopicMetadata.json @@ -0,0 +1,17 @@ +{ + "topic": "TIRF", + "payers": [ + "cms" + ], + "mappings": [ + { + "codeSystem": "rxnorm", + "codes":[ + "1237051" + ] + } + ], + "fhirVersions": [ + "R4" + ] +} diff --git a/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrepopulation-0.1.0.cql new file mode 100644 index 00000000..eae93b82 --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrepopulation-0.1.0.cql @@ -0,0 +1,130 @@ +library TuralioPrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers +include CDS_Connect_Commons_for_FHIRv400 version '1.0.2' called CDS +include DTRHelpers version '0.1.0' called DTR + +codesystem "ICD-10-CM": 'http://hl7.org/fhir/sid/icd-10-cm' +codesystem "LOINC": 'http://loinc.org' +codesystem "SNOMED-CT": 'http://snomed.info/sct' +codesystem "RXNORM": 'http://www.nlm.nih.gov/research/umls/rxnorm' + + +valueset "HepaticMedicalHistory": 'https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.198' +valueset "TuralioValueSet": 'https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197' + +code "29463-7": '29463-7' from "LOINC" +code "2183102": '2183102' from "RXNORM" +code "AST": '1920-8' from "LOINC" +code "ALT": '1742-6' from "LOINC" +code "GGT": '2324-2' from "LOINC" +code "TotalBilirubin": '1975-2' from "LOINC" +code "DirectBilirubin": '1968-7' from "LOINC" +code "ALP": '13874-3' from "LOINC" +code "Albumin": '1751-7' from "LOINC" +code "PT": '5902-2' from "LOINC" + +parameter medication_request MedicationRequest +parameter medication_dispense MedicationDispense + +context Patient + +// get observations +define "WeightList": [Observation: "29463-7"] +define "LatestWeight": CDS.MostRecent(CDS.WithUnit(CDS.Verified("WeightList"),'mg')) +define "LatestWeightResult": DTR.GetObservationValue("LatestWeight") + +define "Turalio": [MedicationStatement: "TuralioValueSet"] +define "TakingTuralio": exists("Turalio") +define "TuralioDate": + if "TakingTuralio" + then First("Turalio").effective.value + else + null + +define "LatestAST": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "AST"]), 'U/L')) +define "ASTResult": (convert DTR.GetObservationValue("LatestAST") to String) + ' U/L' +define "ASTDate": + if exists("LatestAST") + then "LatestAST".issued.value + else + null + +define "LatestALT": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "ALT"]), 'U/L')) +define "ALTResult": (convert DTR.GetObservationValue("LatestALT") to String) + ' U/L' +define "ALTDate": + if exists("LatestALT") + then "LatestALT".issued.value + else + null + +define "LatestGGT": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "GGT"]), 'U/L')) +define "GGTResult": (convert DTR.GetObservationValue("LatestGGT") to String) + ' U/L' +define "GGTDate": + if exists("LatestGGT") + then "LatestGGT".issued.value + else + null + +define "LatestTotalBilirubin": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "TotalBilirubin"]), 'mg/dL')) +define "TotalBilirubinResult": (convert DTR.GetObservationValue("LatestTotalBilirubin") to String) + ' mg/dL' +define "TotalBilirubinDate": + if exists("LatestTotalBilirubin") + then "LatestTotalBilirubin".issued.value + else + null + +define "LatestDirectBilirubin": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "DirectBilirubin"]), 'mg/dL')) +define "DirectBilirubinResult": (convert DTR.GetObservationValue("LatestDirectBilirubin") to String) + ' mg/dL' +define "DirectBilirubinDate": + if exists("LatestDirectBilirubin") + then "LatestDirectBilirubin".issued.value + else + null + +define "LatestALP": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "ALP"]), 'U/L')) +define "ALPResult": (convert DTR.GetObservationValue("LatestALP") to String) + ' U/L' +define "ALPDate": + if exists("LatestALP") + then "LatestALP".issued.value + else + null + +define "LatestAlbumin": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "Albumin"]), 'g/dL')) +define "AlbuminResult": (convert DTR.GetObservationValue("LatestAlbumin") to String) + ' g/dL' +define "AlbuminDate": + if exists("LatestAlbumin") + then "LatestAlbumin".issued.value + else + null + +define "LatestPT": CDS.MostRecent(CDS.WithUnit(CDS.Verified([Observation: "PT"]), 's')) +define "PTResult": (convert DTR.GetObservationValue("LatestPT") to String) + ' s' +define "PTDate": + if exists("LatestPT") + then "LatestPT".issued.value + else + null + +define "MedList": [MedicationStatement] M + where M.status.value = 'active' + +define "TakingMeds": not exists("MedList") +define function GetMedicationsTupleList(MedStatementList List): + distinct( + flatten( + MedStatementList MedStatement + let MedicationList: + (MedStatement.medication.coding) CODING + return (FHIRHelpers.ToCode(CODING).display + ' - ' + FHIRHelpers.ToCode(CODING).code) + + return MedicationList + ) + ) +define "Meds": GetMedicationsTupleList(MedList) +define "MedsString": + Meds M + aggregate Result starting '': Result + ', ' + M + +define "MedicalHistoryList": [Condition: "HepaticMedicalHistory"] +define "MedicalHistory": DTR.CodesFromConditions(CDS.Confirmed("MedicalHistoryList")) \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrescriberEnrollmentPrepopulation-0.1.0.cql b/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrescriberEnrollmentPrepopulation-0.1.0.cql new file mode 100644 index 00000000..dfc78591 --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioPrescriberEnrollmentPrepopulation-0.1.0.cql @@ -0,0 +1,62 @@ +library TuralioPrescriberEnrollmentPrepopulation version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + + +codesystem "ICD-10-CM": 'http://hl7.org/fhir/sid/icd-10-cm' +codesystem "LOINC": 'http://loinc.org' +codesystem "SNOMED-CT": 'http://snomed.info/sct' +codesystem "RXNORM": 'http://www.nlm.nih.gov/research/umls/rxnorm' + +valueset "TuralioValueSet": 'https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197' + + +code "Oncologist":'394592004' from "SNOMED-CT" + +parameter device_request DeviceRequest +parameter service_request ServiceRequest +parameter medication_request MedicationRequest + +context Patient + +define Today: Today() + +define "SigningProviderReference": Coalesce(device_request.performer.reference.value, service_request.performer.reference.value, medication_request.requester.reference.value) +// Get Practitioner +define OrderingProvider: singleton from ( + [Practitioner] practitioner + where ('Practitioner/' + practitioner.id) = SigningProviderReference) + +define Qualifications: singleton from ( + "OrderingProvider".qualification[0].code.coding[0].code.value) + +define Credentials: {Qualifications} + +define PractitionerRole: singleton from ( + [PractitionerRole] prole + where (prole.practitioner.reference.value) = SigningProviderReference) + +define Specialty: FHIRHelpers.ToConcept("PractitionerRole".specialty[0] as FHIR.CodeableConcept).codes + +define PreferredCommunication: {(singleton from ( + "OrderingProvider".telecom telecom where telecom.rank.value = 1)).system.value} + +define OrgName: ([Organization] org).name.value + +define MD: (singleton from ( + "OrderingProvider".identifier identifier + where identifier.type.coding[0].code = 'MD')).value.value + + +//retrieve a collection of instances that align with Turalio prescriber certification +define ValidTuralioCredentials: + from "OrderingProvider".qualification qualification + where qualification.identifier.system.value = 'http://www.nlm.nih.gov/research/umls/rxnorm' and qualification.identifier.value.value = '2183126' + +//when empty, all accesses are null and so prepopulation will be blank +define ThirdPartyCredentials: ValidTuralioCredentials[0].code.text.value +define ThirdPartyIssuer: ValidTuralioCredentials[0].issuer.display.value + + + + diff --git a/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioRule-0.1.0.cql b/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioRule-0.1.0.cql new file mode 100644 index 00000000..e922d55b --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/files/TuralioRule-0.1.0.cql @@ -0,0 +1,76 @@ +library TuralioRule version '0.1.0' +using FHIR version '4.0.0' +include FHIRHelpers version '4.0.0' called FHIRHelpers + + +parameter Patient Patient +parameter medication_request MedicationRequest +parameter medication_dispense MedicationDispense +parameter medication_statement MedicationStatement + +define RULE_APPLIES: + true + +define PRIORAUTH_REQUIRED: + false + +define DOCUMENTATION_REQUIRED: + true + +define RESULT_InfoLink: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf' +define INFO_PATIENT_MedicationGuide: + 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true' +define INFO_PATIENT_PatientGuide: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf' +define INFO_PRESCRIBER_PrescribingInformation: + 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio&inline=true' +define INFO_PRESCRIBER_ProgramOverview: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Program_Overview.pdf' +define INFO_PRESCRIBER_PrescriberTraining: + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Prescriber_Training.pdf' + +define RESULT_QuestionnaireOrderUri: + 'Questionnaire/TuralioRemsPatientEnrollment' + +define RESULT_QuestionnaireDispenseUri: + 'Questionnaire/TuralioRemsPatientEnrollment' + +define RESULT_QuestionnaireProgressNoteUri: + 'Questionnaire/TuralioRemsPatientStatus' + +define RESULT_QuestionnairePrescriberEnrollmentUri: + 'Questionnaire/TuralioPrescriberEnrollmentForm' + +define RESULT_QuestionnairePrescriberKnowledgeAssessmentUri: + 'Questionnaire/TuralioPrescriberKnowledgeAssessment' + +define RESULT_requestId: + medication_request + +define RESULT_dispense: + medication_dispense + +define "MedicationCodingFromParameter": Coalesce(medication_request.medication.coding, medication_dispense.medication.coding) + +define "MedicationStatementCodingFromParamter": medication_statement.medication.coding + +define ALTERNATIVE_THERAPY: + if MedicationCodingFromParameter.code.value in { '105611', '239983' } + then Code { code: '197388', display: 'Azathioprine 50 MG Oral', system: 'http://www.nlm.nih.gov/research/umls/rxnorm' } + else null + +define DRUG_INTERACTION: + if MedicationCodingFromParameter.code.value in { '105585' } + and MedicationStatementCodingFromParamter.code.value in { '105611', '197388', '239983' } + then true + else if MedicationCodingFromParameter.code.value in { '105611', '197388', '239983' } + and MedicationStatementCodingFromParamter.code.value in { '105585' } + then true + else false + +define REQUESTED_DRUG_CODE: + MedicationCodingFromParameter + +define STATEMENT_DRUG_CODE: + MedicationStatementCodingFromParamter diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json new file mode 100644 index 00000000..f2d71fff --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json @@ -0,0 +1,99 @@ +{ + "resourceType": "Library", + "id": "Turalio-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/Turalio-prepopulation", + "name": "Turalio-prepopulation", + "version": "0.1.0", + "title": "Turalio Prepopulation", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + }, + { + "type": "depends-on", + "resource": "Library/CDS_Connect_Commons_for_FHIRv400" + }, + { + "type": "depends-on", + "resource": "Library/DTRHelpers" + } + ], + "dataRequirement": [ + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.81" + } + ] + }, + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.198" + } + ] + }, + { + "type": "Procedure", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.90" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.192" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.193" + } + ] + }, + { + "type": "Observation" + }, + { + "type": "MedicationStatement", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197" + } + ] + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBUdXJhbGlvUHJlcG9wdWxhdGlvbiAgdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIHZlcnNpb24gJzEuMC4yJyBjYWxsZWQgQ0RTCmluY2x1ZGUgRFRSSGVscGVycyB2ZXJzaW9uICcwLjEuMCcgY2FsbGVkIERUUgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKCnZhbHVlc2V0ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiOiAnaHR0cHM6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTgnCnZhbHVlc2V0ICJUdXJhbGlvVmFsdWVTZXQiOiAnaHR0cHM6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTcnCgpjb2RlICIyOTQ2My03IjogJzI5NDYzLTcnIGZyb20gIkxPSU5DIgpjb2RlICIyMTgzMTAyIjogJzIxODMxMDInIGZyb20gIlJYTk9STSIKY29kZSAiQVNUIjogJzE5MjAtOCcgZnJvbSAiTE9JTkMiCmNvZGUgIkFMVCI6ICcxNzQyLTYnIGZyb20gIkxPSU5DIgpjb2RlICJHR1QiOiAnMjMyNC0yJyBmcm9tICJMT0lOQyIKY29kZSAiVG90YWxCaWxpcnViaW4iOiAnMTk3NS0yJyBmcm9tICJMT0lOQyIKY29kZSAiRGlyZWN0QmlsaXJ1YmluIjogJzE5NjgtNycgZnJvbSAiTE9JTkMiCmNvZGUgIkFMUCI6ICcxMzg3NC0zJyBmcm9tICJMT0lOQyIKY29kZSAiQWxidW1pbiI6ICcxNzUxLTcnIGZyb20gIkxPSU5DIgpjb2RlICJQVCI6ICc1OTAyLTInIGZyb20gIkxPSU5DIgoKcGFyYW1ldGVyIG1lZGljYXRpb25fcmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdApwYXJhbWV0ZXIgbWVkaWNhdGlvbl9kaXNwZW5zZSBNZWRpY2F0aW9uRGlzcGVuc2UKCmNvbnRleHQgUGF0aWVudAoKLy8gZ2V0IG9ic2VydmF0aW9ucyAKZGVmaW5lICJXZWlnaHRMaXN0IjogW09ic2VydmF0aW9uOiAiMjk0NjMtNyJdCmRlZmluZSAiTGF0ZXN0V2VpZ2h0IjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZCgiV2VpZ2h0TGlzdCIpLCdtZycpKQpkZWZpbmUgIkxhdGVzdFdlaWdodFJlc3VsdCI6IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RXZWlnaHQiKQoKZGVmaW5lICJUdXJhbGlvIjogW01lZGljYXRpb25TdGF0ZW1lbnQ6ICJUdXJhbGlvVmFsdWVTZXQiXQpkZWZpbmUgIlRha2luZ1R1cmFsaW8iOiBleGlzdHMoIlR1cmFsaW8iKQpkZWZpbmUgIlR1cmFsaW9EYXRlIjogCiAgaWYgIlRha2luZ1R1cmFsaW8iIAogICAgdGhlbiBGaXJzdCgiVHVyYWxpbyIpLmVmZmVjdGl2ZS52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0QVNUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBU1QiXSksICdVL0wnKSkKZGVmaW5lICJBU1RSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QVNUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkFTVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFTVCIpCiAgICB0aGVuICJMYXRlc3RBU1QiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0QUxUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBTFQiXSksICdVL0wnKSkKZGVmaW5lICJBTFRSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QUxUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkFMVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFMVCIpCiAgICB0aGVuICJMYXRlc3RBTFQiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0R0dUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJHR1QiXSksICdVL0wnKSkKZGVmaW5lICJHR1RSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0R0dUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkdHVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEdHVCIpCiAgICB0aGVuICJMYXRlc3RHR1QiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0VG90YWxCaWxpcnViaW4iOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIlRvdGFsQmlsaXJ1YmluIl0pLCAnbWcvZEwnKSkKZGVmaW5lICJUb3RhbEJpbGlydWJpblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RUb3RhbEJpbGlydWJpbiIpIHRvIFN0cmluZykgKyAnIG1nL2RMJwpkZWZpbmUgIlRvdGFsQmlsaXJ1YmluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0VG90YWxCaWxpcnViaW4iKQogICAgdGhlbiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJEaXJlY3RCaWxpcnViaW4iXSksICdtZy9kTCcpKQpkZWZpbmUgIkRpcmVjdEJpbGlydWJpblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3REaXJlY3RCaWxpcnViaW4iKSB0byBTdHJpbmcpICsgJyBtZy9kTCcKZGVmaW5lICJEaXJlY3RCaWxpcnViaW5EYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3REaXJlY3RCaWxpcnViaW4iKQogICAgdGhlbiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFMUCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQUxQIl0pLCAnVS9MJykpCmRlZmluZSAiQUxQUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFMUCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBTFBEYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBTFAiKQogICAgdGhlbiAiTGF0ZXN0QUxQIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFsYnVtaW4iOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIkFsYnVtaW4iXSksICdnL2RMJykpCmRlZmluZSAiQWxidW1pblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RBbGJ1bWluIikgdG8gU3RyaW5nKSArICcgZy9kTCcKZGVmaW5lICJBbGJ1bWluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0QWxidW1pbiIpCiAgICB0aGVuICJMYXRlc3RBbGJ1bWluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdFBUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJQVCJdKSwgJ3MnKSkKZGVmaW5lICJQVFJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RQVCIpIHRvIFN0cmluZykgKyAnIHMnCmRlZmluZSAiUFREYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RQVCIpCiAgICB0aGVuICJMYXRlc3RQVCIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJNZWRMaXN0IjogW01lZGljYXRpb25TdGF0ZW1lbnRdIE0KICB3aGVyZSBNLnN0YXR1cy52YWx1ZSA9ICdhY3RpdmUnCgpkZWZpbmUgIlRha2luZ01lZHMiOiBub3QgZXhpc3RzKCJNZWRMaXN0IikKZGVmaW5lIGZ1bmN0aW9uIEdldE1lZGljYXRpb25zVHVwbGVMaXN0KE1lZFN0YXRlbWVudExpc3QgTGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pik6CiAgZGlzdGluY3QoCiAgICBmbGF0dGVuKAogICAgICBNZWRTdGF0ZW1lbnRMaXN0IE1lZFN0YXRlbWVudAogICAgICAgIGxldCBNZWRpY2F0aW9uTGlzdDoKICAgICAgICAgIChNZWRTdGF0ZW1lbnQubWVkaWNhdGlvbi5jb2RpbmcpIENPRElORwogICAgICAgICAgcmV0dXJuIChGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5kaXNwbGF5ICsgJyAtICcgKyBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5jb2RlKQoKICAgICAgICByZXR1cm4gTWVkaWNhdGlvbkxpc3QgIAogICAgKQogICkgICAKZGVmaW5lICJNZWRzIjogR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QoTWVkTGlzdCkKZGVmaW5lICJNZWRzU3RyaW5nIjogCiAgTWVkcyBNCiAgICBhZ2dyZWdhdGUgUmVzdWx0IHN0YXJ0aW5nICcnOiBSZXN1bHQgKyAnLCAnICsgTQoKZGVmaW5lICJNZWRpY2FsSGlzdG9yeUxpc3QiOiBbQ29uZGl0aW9uOiAiSGVwYXRpY01lZGljYWxIaXN0b3J5Il0KZGVmaW5lICJNZWRpY2FsSGlzdG9yeSI6IERUUi5Db2Rlc0Zyb21Db25kaXRpb25zKENEUy5Db25maXJtZWQoIk1lZGljYWxIaXN0b3J5TGlzdCIpKQ==" + }, + { + "contentType": "application/elm+json", + "data":"eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0LCJzdGFydENoYXIiOjEsImVuZExpbmUiOjQsImVuZENoYXIiOjY3LCJtZXNzYWdlIjoiQ291bGQgbm90IGxvYWQgc291cmNlIGZvciBsaWJyYXJ5IENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeVZlcnNpb25JZCI6IjEuMC4yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NSwic3RhcnRDaGFyIjoxLCJlbmRMaW5lIjo1LCJlbmRDaGFyIjo0NSwibWVzc2FnZSI6IkNvdWxkIG5vdCBsb2FkIHNvdXJjZSBmb3IgbGlicmFyeSBEVFJIZWxwZXJzLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiRFRSSGVscGVycyIsInRhcmdldEluY2x1ZGVMaWJyYXJ5VmVyc2lvbklkIjoiMC4xLjAiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjozNCwic3RhcnRDaGFyIjoyNCwiZW5kTGluZSI6MzQsImVuZENoYXIiOjI2LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjM1LCJzdGFydENoYXIiOjMwLCJlbmRMaW5lIjozNSwiZW5kQ2hhciI6MzIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NDUsInN0YXJ0Q2hhciI6MjEsImVuZExpbmUiOjQ1LCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0Niwic3RhcnRDaGFyIjozMCwiZW5kTGluZSI6NDYsImVuZENoYXIiOjMyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjQ4LCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo0OCwiZW5kQ2hhciI6MjMsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0QVNUIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NTMsInN0YXJ0Q2hhciI6MjEsImVuZExpbmUiOjUzLCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo1NCwic3RhcnRDaGFyIjozMCwiZW5kTGluZSI6NTQsImVuZENoYXIiOjMyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjU2LCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo1NiwiZW5kQ2hhciI6MjMsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0QUxUIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NjEsInN0YXJ0Q2hhciI6MjEsImVuZExpbmUiOjYxLCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo2Miwic3RhcnRDaGFyIjozMCwiZW5kTGluZSI6NjIsImVuZENoYXIiOjMyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjY0LCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo2NCwiZW5kQ2hhciI6MjMsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0R0dUIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NjksInN0YXJ0Q2hhciI6MzIsImVuZExpbmUiOjY5LCJlbmRDaGFyIjozNCwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo3MCwic3RhcnRDaGFyIjo0MSwiZW5kTGluZSI6NzAsImVuZENoYXIiOjQzLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjcyLCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo3MiwiZW5kQ2hhciI6MzQsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0VG90YWxCaWxpcnViaW4gYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo3Nywic3RhcnRDaGFyIjozMywiZW5kTGluZSI6NzcsImVuZENoYXIiOjM1LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjc4LCJzdGFydENoYXIiOjQyLCJlbmRMaW5lIjo3OCwiZW5kQ2hhciI6NDQsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6ODAsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjgwLCJlbmRDaGFyIjozNSwibWVzc2FnZSI6IkNvdWxkIG5vdCB2YWxpZGF0ZSByZWZlcmVuY2UgdG8gZXhwcmVzc2lvbiBMYXRlc3REaXJlY3RCaWxpcnViaW4gYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo4NSwic3RhcnRDaGFyIjoyMSwiZW5kTGluZSI6ODUsImVuZENoYXIiOjIzLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjg2LCJzdGFydENoYXIiOjMwLCJlbmRMaW5lIjo4NiwiZW5kQ2hhciI6MzIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6ODgsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjg4LCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCB2YWxpZGF0ZSByZWZlcmVuY2UgdG8gZXhwcmVzc2lvbiBMYXRlc3RBTFAgYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo5Mywic3RhcnRDaGFyIjoyNSwiZW5kTGluZSI6OTMsImVuZENoYXIiOjI3LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjk0LCJzdGFydENoYXIiOjM0LCJlbmRMaW5lIjo5NCwiZW5kQ2hhciI6MzYsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6OTYsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjk2LCJlbmRDaGFyIjoyNywibWVzc2FnZSI6IkNvdWxkIG5vdCB2YWxpZGF0ZSByZWZlcmVuY2UgdG8gZXhwcmVzc2lvbiBMYXRlc3RBbGJ1bWluIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTAxLCJzdGFydENoYXIiOjIwLCJlbmRMaW5lIjoxMDEsImVuZENoYXIiOjIyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjEwMiwic3RhcnRDaGFyIjoyOSwiZW5kTGluZSI6MTAyLCJlbmRDaGFyIjozMSwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgRFRSIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjoxMDQsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjEwNCwiZW5kQ2hhciI6MjIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0UFQgYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjoxMzAsInN0YXJ0Q2hhciI6MjYsImVuZExpbmUiOjEzMCwiZW5kQ2hhciI6MjgsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifV0sImlkZW50aWZpZXIiOnsiaWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsInZlcnNpb24iOiIwLjEuMCJ9LCJzY2hlbWFJZGVudGlmaWVyIjp7ImlkIjoidXJuOmhsNy1vcmc6ZWxtIiwidmVyc2lvbiI6InIxIn0sInVzaW5ncyI6eyJkZWYiOlt7ImxvY2FsSWRlbnRpZmllciI6IlN5c3RlbSIsInVyaSI6InVybjpobDctb3JnOmVsbS10eXBlczpyMSJ9LHsibG9jYWxJZGVudGlmaWVyIjoiRkhJUiIsInVyaSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJpbmNsdWRlcyI6eyJkZWYiOlt7ImxvY2FsSWRlbnRpZmllciI6IkZISVJIZWxwZXJzIiwicGF0aCI6IkZISVJIZWxwZXJzIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwicGFyYW1ldGVycyI6eyJkZWYiOlt7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX2Rpc3BlbnNlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uRGlzcGVuc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sInZhbHVlU2V0cyI6eyJkZWYiOlt7Im5hbWUiOiJIZXBhdGljTWVkaWNhbEhpc3RvcnkiLCJpZCI6Imh0dHBzOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk4IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJUdXJhbGlvVmFsdWVTZXQiLCJpZCI6Imh0dHBzOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifV19LCJjb2RlcyI6eyJkZWYiOlt7Im5hbWUiOiIyOTQ2My03IiwiaWQiOiIyOTQ2My03IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fSx7Im5hbWUiOiIyMTgzMTAyIiwiaWQiOiIyMTgzMTAyIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJSWE5PUk0ifX0seyJuYW1lIjoiQVNUIiwiaWQiOiIxOTIwLTgiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGVTeXN0ZW0iOnsibmFtZSI6IkxPSU5DIn19LHsibmFtZSI6IkFMVCIsImlkIjoiMTc0Mi02IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fSx7Im5hbWUiOiJHR1QiLCJpZCI6IjIzMjQtMiIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiTE9JTkMifX0seyJuYW1lIjoiVG90YWxCaWxpcnViaW4iLCJpZCI6IjE5NzUtMiIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiTE9JTkMifX0seyJuYW1lIjoiRGlyZWN0QmlsaXJ1YmluIiwiaWQiOiIxOTY4LTciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGVTeXN0ZW0iOnsibmFtZSI6IkxPSU5DIn19LHsibmFtZSI6IkFMUCIsImlkIjoiMTM4NzQtMyIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiTE9JTkMifX0seyJuYW1lIjoiQWxidW1pbiIsImlkIjoiMTc1MS03IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fSx7Im5hbWUiOiJQVCIsImlkIjoiNTkwMi0yIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IldlaWdodExpc3QiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwiY29kZVByb3BlcnR5IjoiY29kZSIsImNvZGVDb21wYXJhdG9yIjoifiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7Im5hbWUiOiIyOTQ2My03IiwidHlwZSI6IkNvZGVSZWYifX19fSx7Im5hbWUiOiJMYXRlc3RXZWlnaHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJMYXRlc3RXZWlnaHRSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJUdXJhbGlvIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlVuaW9uIiwib3BlcmFuZCI6W3siZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwiY29kZVByb3BlcnR5IjoibWVkaWNhdGlvbiIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiVHVyYWxpb1ZhbHVlU2V0IiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fSx7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsImNvZGVQcm9wZXJ0eSI6Im1lZGljYXRpb24iLCJjb2RlQ29tcGFyYXRvciI6ImluIiwidHlwZSI6IlJldHJpZXZlIiwiY29kZXMiOnsibmFtZSI6IlR1cmFsaW9WYWx1ZVNldCIsInByZXNlcnZlIjp0cnVlLCJ0eXBlIjoiVmFsdWVTZXRSZWYifX1dfX0seyJuYW1lIjoiVGFraW5nVHVyYWxpbyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7Im5hbWUiOiJUdXJhbGlvIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19LHsibmFtZSI6IlR1cmFsaW9EYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7Im5hbWUiOiJUYWtpbmdUdXJhbGlvIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSwidGhlbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVmZmVjdGl2ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiRmlyc3QiLCJzb3VyY2UiOnsibmFtZSI6IlR1cmFsaW8iLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiTGF0ZXN0QVNUIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiQVNUUmVzdWx0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiQVNURGF0ZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkxhdGVzdEFMVCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkFMVFJlc3VsdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkFMVERhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJMYXRlc3RHR1QiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJHR1RSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJHR1REYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiTGF0ZXN0VG90YWxCaWxpcnViaW4iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJUb3RhbEJpbGlydWJpblJlc3VsdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IlRvdGFsQmlsaXJ1YmluRGF0ZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkxhdGVzdERpcmVjdEJpbGlydWJpbiIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkRpcmVjdEJpbGlydWJpblJlc3VsdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkRpcmVjdEJpbGlydWJpbkRhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJMYXRlc3RBTFAiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJBTFBSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJBTFBEYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiTGF0ZXN0QWxidW1pbiIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkFsYnVtaW5SZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJBbGJ1bWluRGF0ZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkxhdGVzdFBUIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiUFRSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJQVERhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJNZWRMaXN0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImFjdGl2ZSIsInR5cGUiOiJMaXRlcmFsIn1dfX19LHsibmFtZSI6IlRha2luZ01lZHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRXhpc3RzIiwib3BlcmFuZCI6eyJuYW1lIjoiTWVkTGlzdCIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRGlzdGluY3QiLCJvcGVyYW5kIjp7InR5cGUiOiJGbGF0dGVuIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTWVkU3RhdGVtZW50IiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiTWVkU3RhdGVtZW50TGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiTWVkaWNhdGlvbkxpc3QiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDT0RJTkciLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6Im1lZGljYXRpb24iLCJzY29wZSI6Ik1lZFN0YXRlbWVudCIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJwYXRoIjoiZGlzcGxheSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgLSAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6Ik1lZGljYXRpb25MaXN0IiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn19fX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkU3RhdGVtZW50TGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJNZWRzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkdldE1lZGljYXRpb25zVHVwbGVMaXN0IiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6Ik1lZExpc3QiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX19LHsibmFtZSI6Ik1lZHNTdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTSIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik1lZHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sImFnZ3JlZ2F0ZSI6eyJpZGVudGlmaWVyIjoiUmVzdWx0IiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJuYW1lIjoiUmVzdWx0IiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiLCAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiTSIsInR5cGUiOiJBbGlhc1JlZiJ9XX0sInN0YXJ0aW5nIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIiLCJ0eXBlIjoiTGl0ZXJhbCJ9fX19LHsibmFtZSI6Ik1lZGljYWxIaXN0b3J5TGlzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwiY29kZVByb3BlcnR5IjoiY29kZSIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiSGVwYXRpY01lZGljYWxIaXN0b3J5IiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fX0seyJuYW1lIjoiTWVkaWNhbEhpc3RvcnkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fV19fX0=" + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json new file mode 100644 index 00000000..414c5f7f --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json @@ -0,0 +1,113 @@ +{ + "resourceType": "Library", + "id": "TuralioPrescriberEnrollment-prepopulation", + "url": "http://hl7.org/fhir/us/davinci-dtr/Library/TuralioPrescriberEnrollment-prepopulation", + "name": "TuralioPrescriberEnrollment-prepopulation", + "version": "0.1.0", + "title": "TuralioPrescriberEnrollment Prepopulation", + "status": "draft", + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "depends-on", + "resource": "Library/FHIRHelpers-4.0.0" + }, + { + "type": "depends-on", + "resource": "Library/CDS_Connect_Commons_for_FHIRv400" + }, + { + "type": "depends-on", + "resource": "Library/DTRHelpers" + } + ], + "dataRequirement": [ + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.81" + } + ] + }, + { + "type": "Condition", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.198" + } + ] + }, + { + "type": "Procedure", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.90" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.192" + } + ] + }, + { + "type": "MedicationRequest", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.193" + } + ] + }, + { + "type": "Observation" + }, + { + "type": "MedicationStatement", + "codeFilter": [ + { + "path": "code", + "valueSet": "https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1219.197" + } + ] + }, + { + "type": "Practitioner" + }, + { + "type": "PractitionerRole", + "subjectCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/ValueSet/subject-type", + "code": "Practitioner" + } + ] + } + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uICB2ZXJzaW9uICcwLjEuMCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMCcKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKdmFsdWVzZXQgIlR1cmFsaW9WYWx1ZVNldCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3JwoKCmNvZGUgIk9uY29sb2dpc3QiOiczOTQ1OTIwMDQnIGZyb20gIlNOT01FRC1DVCIKCnBhcmFtZXRlciBkZXZpY2VfcmVxdWVzdCBEZXZpY2VSZXF1ZXN0CnBhcmFtZXRlciBzZXJ2aWNlX3JlcXVlc3QgU2VydmljZVJlcXVlc3QKcGFyYW1ldGVyIG1lZGljYXRpb25fcmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdAoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgVG9kYXk6IFRvZGF5KCkKCmRlZmluZSAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIjogQ29hbGVzY2UoZGV2aWNlX3JlcXVlc3QucGVyZm9ybWVyLnJlZmVyZW5jZS52YWx1ZSwgc2VydmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIG1lZGljYXRpb25fcmVxdWVzdC5yZXF1ZXN0ZXIucmVmZXJlbmNlLnZhbHVlKQovLyBHZXQgUHJhY3RpdGlvbmVyCmRlZmluZSBPcmRlcmluZ1Byb3ZpZGVyOiBzaW5nbGV0b24gZnJvbSAoCiAgW1ByYWN0aXRpb25lcl0gcHJhY3RpdGlvbmVyCiAgICB3aGVyZSAoJ1ByYWN0aXRpb25lci8nICsgcHJhY3RpdGlvbmVyLmlkKSA9ICBTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UpCgpkZWZpbmUgUXVhbGlmaWNhdGlvbnM6IHNpbmdsZXRvbiBmcm9tICgKICAgICJPcmRlcmluZ1Byb3ZpZGVyIi5xdWFsaWZpY2F0aW9uWzBdLmNvZGUuY29kaW5nWzBdLmNvZGUudmFsdWUpCgpkZWZpbmUgQ3JlZGVudGlhbHM6IHtRdWFsaWZpY2F0aW9uc30KCmRlZmluZSBQcmFjdGl0aW9uZXJSb2xlOiBzaW5nbGV0b24gZnJvbSAoCiAgW1ByYWN0aXRpb25lclJvbGVdIHByb2xlCiAgICB3aGVyZSAocHJvbGUucHJhY3RpdGlvbmVyLnJlZmVyZW5jZS52YWx1ZSkgPSBTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UpCgpkZWZpbmUgU3BlY2lhbHR5OiAgRkhJUkhlbHBlcnMuVG9Db25jZXB0KCJQcmFjdGl0aW9uZXJSb2xlIi5zcGVjaWFsdHlbMF0gYXMgRkhJUi5Db2RlYWJsZUNvbmNlcHQpLmNvZGVzCgpkZWZpbmUgUHJlZmVycmVkQ29tbXVuaWNhdGlvbjogeyhzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLnRlbGVjb20gdGVsZWNvbSB3aGVyZSB0ZWxlY29tLnJhbmsudmFsdWUgPSAxKSkuc3lzdGVtLnZhbHVlfQoKZGVmaW5lIE9yZ05hbWU6IChbT3JnYW5pemF0aW9uXSBvcmcpLm5hbWUudmFsdWUKCmRlZmluZSBNRDogKHNpbmdsZXRvbiBmcm9tICgKICAiT3JkZXJpbmdQcm92aWRlciIuaWRlbnRpZmllciBpZGVudGlmaWVyCiAgICB3aGVyZSBpZGVudGlmaWVyLnR5cGUuY29kaW5nWzBdLmNvZGUgPSAnTUQnKSkudmFsdWUudmFsdWUKCgovL3JldHJpZXZlIGEgY29sbGVjdGlvbiBvZiBpbnN0YW5jZXMgdGhhdCBhbGlnbiB3aXRoIFR1cmFsaW8gcHJlc2NyaWJlciBjZXJ0aWZpY2F0aW9uCmRlZmluZSBWYWxpZFR1cmFsaW9DcmVkZW50aWFsczogCiAgZnJvbSAiT3JkZXJpbmdQcm92aWRlciIucXVhbGlmaWNhdGlvbiBxdWFsaWZpY2F0aW9uIAogICAgd2hlcmUgcXVhbGlmaWNhdGlvbi5pZGVudGlmaWVyLnN5c3RlbS52YWx1ZSA9ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJyBhbmQgcXVhbGlmaWNhdGlvbi5pZGVudGlmaWVyLnZhbHVlLnZhbHVlID0gJzIxODMxMjYnCgovL3doZW4gZW1wdHksIGFsbCBhY2Nlc3NlcyBhcmUgbnVsbCBhbmQgc28gcHJlcG9wdWxhdGlvbiB3aWxsIGJlIGJsYW5rCmRlZmluZSBUaGlyZFBhcnR5Q3JlZGVudGlhbHM6IFZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzWzBdLmNvZGUudGV4dC52YWx1ZQpkZWZpbmUgVGhpcmRQYXJ0eUlzc3VlcjogVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHNbMF0uaXNzdWVyLmRpc3BsYXkudmFsdWUKCgoKCg==" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjI0LCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MjQsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MjQsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoyNCwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo1NCwic3RhcnRDaGFyIjo0MywiZW5kTGluZSI6NTQsImVuZENoYXIiOjQ3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo1NCwic3RhcnRDaGFyIjoxMzIsImVuZExpbmUiOjU0LCJlbmRDaGFyIjoxMzYsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJ2ZXJzaW9uIjoiMC4xLjAifSwic2NoZW1hSWRlbnRpZmllciI6eyJpZCI6InVybjpobDctb3JnOmVsbSIsInZlcnNpb24iOiJyMSJ9LCJ1c2luZ3MiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJTeXN0ZW0iLCJ1cmkiOiJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEifSx7ImxvY2FsSWRlbnRpZmllciI6IkZISVIiLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwiaW5jbHVkZXMiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJGSElSSGVscGVycyIsInBhdGgiOiJGSElSSGVscGVycyIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInBhcmFtZXRlcnMiOnsiZGVmIjpbeyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6Im1lZGljYXRpb25fcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sInZhbHVlU2V0cyI6eyJkZWYiOlt7Im5hbWUiOiJUdXJhbGlvVmFsdWVTZXQiLCJpZCI6Imh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6Ik9uY29sb2dpc3QiLCJpZCI6IjM5NDU5MjAwNCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiU05PTUVELUNUIn19XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6IlF1YWxpZmljYXRpb25zIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sibmFtZSI6IlF1YWxpZmljYXRpb25zIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJQcmFjdGl0aW9uZXJSb2xlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJwcm9sZSIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InByYWN0aXRpb25lciIsInNjb3BlIjoicHJvbGUiLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6IlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJTcGVjaWFsdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZXMiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InNwZWNpYWx0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUHJhY3RpdGlvbmVyUm9sZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19LHsibmFtZSI6IlByZWZlcnJlZENvbW11bmljYXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoidGVsZWNvbSIsImV4cHJlc3Npb24iOnsicGF0aCI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJhbmsiLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19XX19LHsibmFtZSI6Ik9yZ05hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im9yZyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdfX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7Im5hbWUiOiJNRCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InR5cGUiLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiTUQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJWYWxpZFR1cmFsaW9DcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJxdWFsaWZpY2F0aW9uIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIyMTgzMTI2IiwidHlwZSI6IkxpdGVyYWwifV19XX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5SXNzdWVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJkaXNwbGF5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJpc3N1ZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fV19fX0=" + } +] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment.json new file mode 100644 index 00000000..695c5c5b --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Prescriber-Knowledge-Assessment.json @@ -0,0 +1,360 @@ +{ + "resourceType": "Questionnaire", + "id": "TuralioPrescriberKnowledgeAssessment", + "name": "TuralioPrescriberKnowledgeAssessment", + "title": "Turalio REMS Prescriber Knowledge Assessment", + "status": "draft", + "subjectType": [ + "Prescriber" + ], + "date": "2022-05-28", + "publisher": "FDA-REMS", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPractitionerInfo-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "1.1", + "text": "First Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FirstName" + } + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/minLength", + "valueInteger": 2 + } + ] + }, + { + "linkId": "1.2", + "text": "Last Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".LastName" + } + }, + { + "url" : "http://hl7.org/fhir/StructureDefinition/minLength", + "valueInteger": 2 + } + ] + }, + { + "linkId": "1.3", + "text": "Middle Initial", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".MiddleInitial" + } + } + ] + }, + { + "linkId": "1.4", + "text": "National Provider Identifier (NPI) #", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".NPI" + } + } + ] + }, + { + "linkId": "1.5", + "text": "Phone Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "1.6", + "text": "Fax Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Fax" + } + } + ] + }, + { + "linkId": "1.7", + "text": "Email", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Knowledge Assessment: Questions 1-9", + "item": [ + { + "linkId": "2.1", + "text": "1. TURALIO is indicated for the treatment of adult patients with symptomatic tenosynovial giant cell tumor (TGCT) associated with severe morbidity or functional limitations and not amenable to improvement with surgery.", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "true", + "display": "True" + } + }, + { + "valueCoding": { + "code": "false", + "display": "False" + } + } + ] + }, + { + "linkId": "2.2", + "text": "2. TURALIO is contraindicated in patients with hepatic impairment.", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "true", + "display": "True" + } + }, + { + "valueCoding": { + "code": "false", + "display": "False" + } + } + ] + }, + { + "linkId": "2.3", + "text": "3. To prescribe TURALIO, I must enroll each patient in the TURALIO REMS by completing a Patient Enrollment Form with the patient and submitting it to the TURALIO REMS.", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "true", + "display": "True" + } + }, + { + "valueCoding": { + "code": "false", + "display": "False" + } + } + ] + }, + { + "linkId": "2.4", + "text": "4. Before treating each patient with TURALIO, I must", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "Become certified in the TURALIO REMS", + "display": "Become certified in the TURALIO REMS" + } + }, + { + "valueCoding": { + "code": "Counsel the patient regarding the risk of serious and potentially fatal liver injury associated with TURALIO", + "display": "Counsel the patient regarding the risk of serious and potentially fatal liver injury associated with TURALIO" + } + }, + { + "valueCoding": { + "code": "Obtain and review baseline liver tests", + "display": "Obtain and review baseline liver tests" + } + }, + { + "valueCoding": { + "code": "All of the above", + "display": "All of the above" + } + } + ] + }, + { + "linkId": "2.5", + "text": "5. One of the primary counseling messages I must tell my patients before prescribing TURALIO is", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "Do not take TURALIO if you have vision issues", + "display": "Do not take TURALIO if you have vision issues" + } + }, + { + "valueCoding": { + "code": "Patients with renal impairment should not start TURALIO at a reduced dose", + "display": "Patients with renal impairment should not start TURALIO at a reduced dose" + } + }, + { + "valueCoding": { + "code": "There is a risk of liver injury associated with TURALIO and liver monitoring is required prior to treatment initiation and periodically while taking TURALIO", + "display": "There is a risk of liver injury associated with TURALIO and liver monitoring is required prior to treatment initiation and periodically while taking TURALIO" + } + }, + { + "valueCoding": { + "code": "None of the above", + "display": "None of the above" + } + } + ] + }, + { + "linkId": "2.6", + "text": "6. I am required to educate my patients on the signs and symptoms of liver injury and the need to notify me should they experience them.", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "true", + "display": "True" + } + }, + { + "valueCoding": { + "code": "false", + "display": "False" + } + } + ] + }, + { + "linkId": "2.7", + "text": "7. If any dose modifications are required, they must be done in increments of 200 mg.", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "true", + "display": "True" + } + }, + { + "valueCoding": { + "code": "false", + "display": "False" + } + } + ] + }, + { + "linkId": "2.8", + "text": "8. After treatment initiation, I need to monitor liver tests weekly for the first 8 weeks of treatment, every 2 weeks for the next month, and every 3 months thereafter.", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "true", + "display": "True" + } + }, + { + "valueCoding": { + "code": "false", + "display": "False" + } + } + ] + }, + { + "linkId": "2.9", + "text": "9. I must complete a Patient Status Form for each patient taking TURALIO and submit it to the TURALIO REMS:", + "type": "choice", + "answerOption": [ + { + "valueCoding": { + "code": "Every month during treatment", + "display": "Every month during treatment" + } + }, + { + "valueCoding": { + "code": "Weekly for 8 weeks of treatment, every 2 weeks for the next month, and every 3 months thereafter", + "display": "Weekly for 8 weeks of treatment, every 2 weeks for the next month, and every 3 months thereafter" + } + }, + { + "valueCoding": { + "code": "Every month for the first 3 months of treatment, month 6, month 9, and month 12 of treatment, and every 6 months thereafter", + "display": "Every month for the first 3 months of treatment, month 6, month 9, and month 12 of treatment, and every 6 months thereafter" + } + }, + { + "valueCoding": { + "code": "Every month for the first 6 months of treatment and every 6 months thereafter", + "display": "Every month for the first 6 months of treatment and every 6 months thereafter" + } + }, + { + "valueCoding": { + "code": "None of the above", + "display": "None of the above" + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-PrescriberEnrollment.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-PrescriberEnrollment.json new file mode 100644 index 00000000..d86fa4ba --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-PrescriberEnrollment.json @@ -0,0 +1,517 @@ +{ + "resourceType": "Questionnaire", + "id": "TuralioPrescriberEnrollmentForm", + "name": "TuralioPrescriberEnrollmentForm", + "title": "Turalio REMS Prescriber Enrollment Form", + "status": "draft", + "subjectType": [ + "Practitioner" + ], + "date": "2022-05-28", + "publisher": "FDA-REMS", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/TuralioPrescriberEnrollment-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "1.1", + "text": "First Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".FirstName" + } + } + ] + }, + { + "linkId": "1.2", + "text": "Last Name", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".LastName" + } + } + ] + }, + { + "linkId": "1.3", + "text": "Middle Initial", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".MiddleInitial" + } + } + ] + }, + { + "linkId": "1.4", + "text": "Credentials", + "type": "open-choice", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".Credentials" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "MD", + "display": "MD" + } + }, + { + "valueCoding": { + "code": "DO", + "display": "DO" + } + }, + { + "valueCoding": { + "code": "NP", + "display": "NP" + } + }, + { + "valueCoding": { + "code": "PA", + "display": "PA" + } + }, + { + "valueCoding": { + "code": "Other", + "display": "Other" + } + } + ] + }, + { + "linkId": "1.5", + "text": "Specialty", + "type": "open-choice", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".Specialty" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "Oncology", + "display": "Oncology" + } + }, + { + "valueCoding": { + "code": "Orthopedics", + "display": "Orthopedics" + } + }, + { + "valueCoding": { + "code": "Other", + "display": "Other" + } + } + ] + }, + { + "linkId": "1.6", + "text": "National Provider Identifier (NPI) #", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".NPI" + } + } + ] + }, + { + "linkId": "1.7", + "text": "State License #", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".MD" + } + } + ] + }, + { + "linkId": "1.8", + "text": "Practice/Facility Name", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".OrgName" + } + } + ] + }, + { + "linkId": "1.9", + "text": "Street Address", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "1.10", + "text": "City", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "1.11", + "text": "State", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "1.12", + "text": "ZIP Code", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "1.13", + "text": "Office Phone Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "1.14", + "text": "Office Fax Number", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Fax" + } + } + ] + }, + { + "linkId": "1.15", + "text": "E-Mail", + "type": "string", + "required": true, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + }, + { + "linkId": "1.16", + "text": "Preferred Method of Communication", + "type": "open-choice", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".PreferredCommunication" + } + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "Fax", + "display": "Fax" + } + }, + { + "valueCoding": { + "code": "Email", + "display": "Email" + } + }, + { + "valueCoding": { + "code": "Phone", + "display": "Phone" + } + } + ] + }, + { + "linkId": "1.17", + "text": "Preferred Time of Contact", + "type": "open-choice", + "required": false, + "answerOption": [ + { + "valueCoding": { + "code": "AM", + "display": "AM" + } + }, + { + "valueCoding": { + "code": "PM", + "display": "PM" + } + } + ] + } + + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Office Contact Information", + "item": [ + { + "linkId": "2.1", + "text": "Prescribers may grant administrative rights to two (2) Office Contacts which allow them to view, edit, and initiate paperwork related to the TURALIO REMS via the REMS Portal.", + "type": "display" + }, + { + "linkId": "2.2", + "text": "I, the prescriber, grant administrative rights to the office contact(s) listed below and understand that I must review all paperwork and sign prior to submitting to the REMS.", + "type": "display" + }, + { + "linkId": "2.3", + "type": "group", + "text": "Office Contact #1 (Optional)", + "item": [ + { + "linkId": "2.3.1", + "text": "First Name", + "type": "string", + "required": false + }, + { + "linkId": "2.3.2", + "text": "Last Name", + "type": "string", + "required": false + }, + { + "linkId": "2.3.3", + "text": "Office Phone Number", + "type": "string", + "required": false + }, + { + "linkId": "2.3.4", + "text": "Office Fax Number", + "type": "string", + "required": false + }, + { + "linkId": "2.3.5", + "text": "Email", + "type": "string", + "required": false + } + ] + }, + { + "linkId": "2.4", + "type": "group", + "text": "Office Contact #2 (Optional)", + "item": [ + { + "linkId": "2.4.1", + "text": "First Name", + "type": "string", + "required": false + }, + { + "linkId": "2.4.2", + "text": "Last Name", + "type": "string", + "required": false + }, + { + "linkId": "2.4.3", + "text": "Office Phone Number", + "type": "string", + "required": false + }, + { + "linkId": "2.4.4", + "text": "Office Fax Number", + "type": "string", + "required": false + }, + { + "linkId": "2.4.5", + "text": "Email", + "type": "string", + "required": false + } + ] + }, + { + "linkId": "2.5", + "text": "Office Contacts can be updated by visiting www.turaliorems.com or contacting the TURALIO REMS Coordinating Center at 1-833-TURALIO (833-887-2546).", + "type": "display" + } + ] + }, + { + "linkId": "3", + "type": "group", + "text": "Prescriber Certification (if applicable)", + "item": [ + { + "linkId": "3.1", + "text": "Prescriber Certification Type", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".ThirdPartyCredentials" + } + } + ] + }, + { + "linkId": "3.2", + "text": "Prescriber Certification Issuer", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrescriberEnrollmentPrepopulation\".ThirdPartyIssuer" + } + } + ] + } + ] + }, + { + "linkId": "4", + "type": "group", + "text": "Prescriber Attestations", + "item": [ + { + "linkId": "4.1", + "text": "By signing this form, I agree TURALIO is only available through the TURALIO REMS and I agree to comply with the following TURALIO REMS requirements: \n\n I have: \n - Reviewed the Prescribing Information, Program Overview and Prescriber Training. \n - Successfully completed the Prescriber Knowledge Assessment and submitted it to the TURALIO REMS. \n\n Before treatment initiation and with the first dose of TURALIO: \n - I understand that I should counsel the patient on the risk of serious and potentially fatal liver injury, and liver test monitoring at baseline and periodically during treatment. \n - I must assess the patient by obtaining baseline liver tests. I must submit the results of the assessment on the Patient Enrollment Form. \n - I must enroll patients in the TURALIO REMS by completing and submitting the Patient Enrollment Form. \n\n During treatment with TURALIO: \n - I must assess the patient by obtaining liver tests weekly for the first 8 weeks, then every 2 weeks for 1 month, then every 3 months and modify the dose of TURALIO as needed in accordance with the Prescribing Information. \n - I must prescribe no more than a 30 days supply for each of the first 3 months of treatment. \n - I must complete the Patient Status Form every month for the first 3 months of treatment, at months 6, 9, and 12 and then every 6 months thereafter while the patient receives TURALIO. \n\n At all times: \n - I must report adverse events of serious and potentially fatal liver injury by submitting the Liver Adverse Event Reporting Form. \n - I understand that Daiichi Sankyo, Inc. and/or its agents may contact me by phone, mail or email to provide or obtain additional information related to the REMS program, including details regarding any reported liver adverse events. \n", + "type": "display", + "readOnly": true + }, + { + "linkId": "4.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/provider-signature" + } + ], + "type": "display" + } + + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio-ProgressNote.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio-ProgressNote.json new file mode 100644 index 00000000..3d9fb7e4 --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio-ProgressNote.json @@ -0,0 +1,273 @@ +{ + "resourceType": "Questionnaire", + "id": "TuralioRemsPatientStatus", + "name": "TuralioRemsPatientStatus", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/cqf-questionnaire", + "http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-r4" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicClinicalInfo-prepopulation" + } + ], + "title": "Turalio Rems Patient Status", + "status": "draft", + "date": "2020-04-09", + "publisher": "Da Vinci DTR", + "subjectType": [ + "Patient" + ], + "item": [ + { + "linkId": "1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/patient-info" + } + ], + "type": "display", + "text": "This is a placeholder for Patient/Beneficiary Demographics" + }, + { + "linkId": "2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/practitioner-info" + } + ], + "type": "display", + "text": "This is a placeholder for Physician/NPP Demographics" + }, + { + "linkId": "3", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/encounter" + } + ], + "type": "display", + "text": "This is a placeholder for Encounter" + }, + { + "linkId": "4", + "text": "Current Other Diagnoses", + "type": "open-choice", + "repeats": true, + "required": true, + "answerOption": [] + }, + { + "linkId": "5", + "text": "Qualifying Transplants", + "type": "group", + "required": true, + "item": [ + { + "linkId": "5.1", + "text": "Transplants for Order", + "type": "open-choice", + "repeats": true, + "answerOption": [] + }, + { + "linkId": "5.2", + "text": "Date of transplant", + "type": "date", + "required": true + }, + { + "linkId": "5.3", + "text": "Institution where transplant was performed", + "type": "string" + }, + { + "linkId": "5.4", + "text": "Transplant met Medicare coverage criteria in effect at the time?", + "type": "choice", + "required": true, + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "code": "radio-button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ] + }, + { + "linkId": "5.5", + "text": "If transplant is Pancreas (whole organ) alone, does patient meet the requirements defined in the guidance?", + "type": "choice", + "required": "true", + "answerValueSet": "http://terminology.hl7.org/ValueSet/yes-no-unknown-not-asked", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "code": "radio-button", + "system": "http://hl7.org/fhir/questionnaire-item-control" + } + ] + } + } + ], + "enableWhen": [ + { + "question": "5.1", + "operator": "=", + "answerCoding": { + "code": "698362007", + "system": "http://snomed.info/sct" + } + }, + { + "question": "5.1", + "operator": "=", + "answerCoding": { + "code": "62438007", + "system": "http://snomed.info/sct" + } + }, + { + "question": "5.1", + "operator": "=", + "answerCoding": { + "code": "67562009", + "system": "http://snomed.info/sct" + } + }, + { + "question": "5.1", + "operator": "=", + "answerCoding": { + "code": "71947008", + "system": "http://snomed.info/sct" + } + } + ], + "enableBehavior": "any" + } + ] + }, + { + "linkId": "6", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/subjective" + } + ], + "type": "display", + "text": "This is a placeholder for Subjective" + }, + { + "linkId": "7", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/review-of-system" + } + ], + "type": "display", + "text": "This is a placeholder for Review Of System" + }, + { + "linkId": "8", + "type": "group", + "text": "Physical Examination With Vital Signs", + "item": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/vital-signs" + } + ], + "linkId": "8.1", + "type": "display", + "text": "This is a placeholder for Vital Signs" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/physical-exam" + } + ], + "linkId": "8.2", + "type": "display", + "text": "This is a placeholder for Physician Examination" + } + ] + }, + { + "linkId": "9", + "text": "Immunosuppressive Drug Treatment Plan", + "type": "group", + "item": [ + { + "linkId": "9.1", + "type": "text", + "text": "RxNorm Code" + }, + { + "linkId": "9.2", + "type": "text", + "text": "Drug" + }, + { + "linkId": "9.3", + "type": "text", + "text": "Route" + }, + { + "linkId": "9.4", + "type": "text", + "text": "Dose" + }, + { + "linkId": "9.5", + "type": "text", + "text": "Frequency" + } + ] + }, + { + "linkId": "10", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/assessment-and-plan" + } + ], + "type": "display", + "text": "This is a placeholder for Assessment and Plan" + }, + { + "linkId": "11", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/provider-signature" + } + ], + "type": "display", + "text": "This is a placeholder for Provider Signature" + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio.json new file mode 100644 index 00000000..6efc860c --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Questionnaire-R4-Turalio.json @@ -0,0 +1,1172 @@ +{ + "resourceType": "Questionnaire", + "id": "TuralioRemsPatientEnrollment", + "name": "TuralioRemsPatientEnrollment", + "title": "Turalio Rems Patient Enrollment", + "status": "draft", + "subjectType": [ + "Patient" + ], + "date": "2020-05-20", + "publisher": "Da Vinci DTR", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/Turalio-prepopulation" + } + ], + "item": [ + { + "linkId": "1", + "type": "group", + "text": "Patient Information", + "item": [ + { + "linkId": "1.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/patient-info-base" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire-expand", + "valueBoolean": true + } + ], + "type": "display" + }, + { + "linkId": "1.2", + "text": "Address Line 1", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "1.3", + "text": "Address Line 2", + "type": "string", + "required": false + }, + { + "linkId": "1.4", + "text": "City", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "1.5", + "text": "State", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "1.6", + "text": "Zip", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "1.7", + "text": "Telephone", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "1.8", + "text": "Email", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPatientInfoPrepopulation\".Email" + } + } + ] + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "lbs" + } + }, + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".LatestWeightResult" + } + } + ], + "linkId": "1.9", + "code": [ + { + "code": "29463-7", + "display": "Body weight", + "system": "http://loinc.org" + } + ], + "type": "decimal", + "text": "Body weight" + }, + { + "linkId": "1.10", + "type": "group", + "text": "Body height", + "code": [ + { + "code": "8302-2", + "display": "Body height", + "system": "http://loinc.org" + } + ], + "item": [ + { + "type": "decimal", + "linkId": "1.10.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "ft" + } + } + ] + }, + { + "type": "decimal", + "linkId": "1.10.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unit", + "valueCoding": { + "display": "in" + } + } + ] + } + ] + }, + { + "linkId": "1.11", + "text": "Race", + "type": "open-choice", + "answerOption": [ + { + "valueCoding": { + "code": "American Indian or Alaskan Native", + "display": "American Indian or Alaskan Native" + } + }, + { + "valueCoding": { + "code": "Asian", + "display": "Asian" + } + }, + { + "valueCoding": { + "code": "Black or African American", + "display": "Black or African American" + } + }, + { + "valueCoding": { + "code": "Native Hawaiian or Other Pacific Islander", + "display": "Native Hawaiian or Other Pacific Islander" + } + }, + { + "valueCoding": { + "code": "White", + "display": "White" + } + } + ] + }, + { + "linkId": "1.12", + "text": "Is the patient currently taking pexidartinib (i.e., started prior to REMS enrollment)?", + "type": "boolean", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".TakingTuralio" + } + } + ], + "required": false, + "item": [ + { + "type": "date", + "linkId": "1.12.1", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".TuralioDate" + } + } + ], + "text": "If yes: When did patient start pexidartinib? Date (MM/DD/YYYY):", + "enableWhen": [ + { + "question": "1.12", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "type": "boolean", + "linkId": "1.12.2", + "text": "If yes: Was this part of a clinical study?", + "enableWhen": [ + { + "question": "1.12", + "operator": "=", + "answerBoolean": true + } + ], + "item": [ + { + "type": "string", + "linkId": "1.12.3", + "text": "Study Number", + "enableWhen": [ + { + "question": "1.12.2", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "type": "string", + "linkId": "1.12.4", + "text": "Subject ID", + "enableWhen": [ + { + "question": "1.12.2", + "operator": "=", + "answerBoolean": true + } + ] + }, + { + "type": "string", + "linkId": "1.12.5", + "text": "Comment" + } + ] + } + ] + } + ] + }, + { + "linkId": "2", + "type": "group", + "text": "Prescriber Information", + "item": [ + { + "linkId": "2.1", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/practitioner-info-base" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire-expand", + "valueBoolean": true + } + ], + "type": "display" + }, + { + "linkId": "2.2", + "text": "Practice/Facility Name (where you see this patient)", + "type": "string", + "required": false + }, + { + "linkId": "2.3", + "text": "Address Line 1", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Line" + } + } + ] + }, + { + "linkId": "2.4", + "text": "Address Line 2", + "type": "string", + "required": false + }, + { + "linkId": "2.5", + "text": "City", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".City" + } + } + ] + }, + { + "linkId": "2.6", + "text": "State", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".State" + } + } + ] + }, + { + "linkId": "2.7", + "text": "Zip", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Zip" + } + } + ] + }, + { + "linkId": "2.8", + "text": "Telephone", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Phone" + } + } + ] + }, + { + "linkId": "2.9", + "text": "Email", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"BasicPractitionerInfoPrepopulation\".Email" + } + } + ] + }, + { + "text": "Please visit www.turaliorems.com or contact the TURALIO REMS Coordinating Center at 1-833-TURALIO (833-887-2546) to designate up to two additional REMS certified prescribers who can view, edit, and submit REMS paperwork for your TURALIO patients.", + "type": "display", + "linkId": "2.10" + } + ] + }, + { + "linkId": "3", + "type": "group", + "text": "Baseline Labs", + "item": [ + { + "linkId": "3.1", + "text": "Assess the patient by obtaining liver tests as stated in the Prescribing Information. If Albumin or PT/INR were not obtained, indicate “not applicable.” Please provide the results below.", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "AST or SGOT" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".ASTResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".ASTDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "ALT or SGPT" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".ALTResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".ALTDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "GGT" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".GGTResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".GGTDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "Total Bilirubin" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".TotalBilirubinResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".TotalBilirubinDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "Direct Bilirubin" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".DirectBilirubinResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".DirectBilirubinDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "Alkaline Phosphatase" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".ALPResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".ALPDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "Albumin" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".AlbuminResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".AlbuminDate" + } + } + ] + } + ] + }, + { + "linkId": "3.1", + "type": "group", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/questionnaire-item-control", + "code": "gtable" + } + ] + } + } + ], + "item" : [ + { + "linkId": "3.1.1", + "text": "Laboratory Test", + "type": "string", + "initial": [{ + "valueString": "PT/INR" + }], + "readOnly": true + }, + { + "linkId": "3.1.2", + "text": "Baseline Value (units, reference range)", + "type": "string", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".PTResult" + } + } + ] + }, + { + "linkId": "3.1.3", + "text": "Date", + "type": "date", + "required": false, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".PTDate" + } + } + ] + } + ] + } + ] + }, + { + "linkId": "4", + "type": "group", + "text": "Current Medication (including prescription, non-prescription and herbal or dietary supplements)", + "item": [ + { + "linkId": "4.1", + "text": "Check box if there are no current medications", + "type": "boolean", + "required": false, + "initial": { + "value": false + }, + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".TakingMeds" + } + } + ] + }, + { + "linkId": "4.2", + "text": "Medication", + "type": "string", + "required": false, + "enableWhen": [ + { + "question": "4.1", + "operator": "=", + "answerBoolean": false + } + ], + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".Meds" + } + } + ] + } + ] + }, + { + "linkId": "5", + "type": "group", + "text": "Hepatic Medical History", + "item": [ + { + "linkId": "5.1", + "text": "Check box in this section if there is no hepatic medical history", + "type": "boolean", + "required": false, + "initial": { + "value": false + } + }, + { + "linkId": "5.2", + "text": "Check all that apply", + "type": "choice", + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", + "valueExpression": { + "language": "text/cql", + "expression": "\"TuralioPrepopulation\".MedicalHistory" + } + } + ], + "required": true, + "repeats": true, + "enableWhen": [ + { + "question": "5.1", + "operator": "=", + "answerBoolean": false + } + ], + "answerOption": [ + { + "valueCoding": { + "code": "3738000", + "system": "http://snomed.info/sct", + "display": "Hepatitis Viral Status" + } + }, + { + "valueCoding": { + "code": "85057007", + "system": "http://snomed.info/sct", + "display": "Hepatic Cyst" + } + }, + { + "valueCoding": { + "code": "235877000", + "system": "http://snomed.info/sct", + "display": "Ischemic Hepatitis" + } + }, + { + "valueCoding": { + "code": "15167005", + "system": "http://snomed.info/sct", + "display": "Alcohol Abuse" + } + }, + { + "valueCoding": { + "code": "266902008", + "system": "http://snomed.info/sct", + "display": "Family History of Liver Disease" + } + }, + { + "valueCoding": { + "code": "408335007", + "system": "http://snomed.info/sct", + "display": "Autoimmune Hepatitis" + } + }, + { + "valueCoding": { + "code": "88518009", + "system": "http://snomed.info/sct", + "display": "Wilson’s Disease" + } + }, + { + "valueCoding": { + "code": "26416006", + "system": "http://snomed.info/sct", + "display": "Drug Abuse" + } + }, + { + "valueCoding": { + "code": "27503000", + "system": "http://snomed.info/sct", + "display": "Gilbert’s syndrome" + } + }, + { + "valueCoding": { + "code": "363140000", + "system": "http://snomed.info/sct", + "display": "Hypolipoproteinemia" + } + }, + { + "valueCoding": { + "code": "14783006", + "system": "http://snomed.info/sct", + "display": "Familial Hyperbilirubinemia" + } + }, + { + "valueCoding": { + "code": "56882008", + "system": "http://snomed.info/sct", + "display": "Anorexia" + } + }, + { + "valueCoding": { + "code": "105997008", + "system": "http://snomed.info/sct", + "display": "Biliary Tract Disorder" + } + }, + { + "valueCoding": { + "code": "302870006", + "system": "http://snomed.info/sct", + "display": "Hypertriglyceridemia" + } + }, + { + "valueCoding": { + "code": "19943007", + "system": "http://snomed.info/sct", + "display": "Cirrhosis" + } + }, + { + "valueCoding": { + "code": "39621005", + "system": "http://snomed.info/sct", + "display": "Gallbladder Disease/ Gallstones/ Bile Duct Occlusion" + } + }, + { + "valueCoding": { + "code": "73211009", + "system": "http://snomed.info/sct", + "display": "Diabetes" + } + } + ] + } + ] + }, + { + "linkId": "6", + "type": "group", + "text": "Prescriber Agreement", + "item": [ + { + "linkId": "6.1", + "text": "I have reviewed and discussed the risks of TURALIO and the requirements of the TURALIO REMS with this patient.", + "type": "display" + }, + { + "linkId": "6.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/provider-signature" + } + ], + "type": "display" + } + ] + }, + { + "linkId": "7", + "type": "group", + "text": "Patient Attestation", + "item": [ + { + "linkId": "7.1", + "text": "In order to receive TURALIO I must be enrolled in the TURALIO REMS. The TURALIO REMS will collect data to assess the risk of serious liver problems which can be severe and lead to death as described in the Patient Guide. \n • I agree to enroll in the Patient Registry. \n • I agree to review the Patient Guide. \n • I must get blood tests to test my liver as directed by my healthcare provider. \n • I agree to tell my healthcare provider if I have signs and/or symptoms of liver injury. \n • My personal information will be shared to enroll me in the Patient Registry so that my health and any liver injury can be evaluated while I am receiving TURALIO. \n • Daiichi Sankyo, Inc., and its agents, may contact me or my prescriber by phone, mail or email to manage the TURALIO REMS. \n • Daiichi Sankyo, Inc., and its agents, may use and share my personal health information, including lab tests and prescriptions as part of the TURALIO REMS. My information will be protected and will be used to enroll me into and manage the TURALIO REMS. My health information may be shared with the U.S. Food and Drug Administration (FDA) to evaluate the TURALIO REMS.", + "type": "display", + "readOnly": true + }, + { + "linkId": "7.2", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/sub-questionnaire", + "valueCanonical": "questionnaire/patient-signature" + } + ], + "type": "display" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/cds-library/CRD-DTR/Turalio/TopicMetadata.json b/src/cds-library/CRD-DTR/Turalio/TopicMetadata.json new file mode 100644 index 00000000..ad847ebf --- /dev/null +++ b/src/cds-library/CRD-DTR/Turalio/TopicMetadata.json @@ -0,0 +1,17 @@ +{ + "topic": "Turalio", + "payers": [ + "cms" + ], + "mappings": [ + { + "codeSystem": "rxnorm", + "codes":[ + "2183126" + ] + } + ], + "fhirVersions": [ + "R4" + ] +} From 27a70e539da63f28db34d2ac21fed2ff71169098 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 16:13:47 -0500 Subject: [PATCH 39/83] remove headers --- src/fhir/questionnaireUtilities.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/fhir/questionnaireUtilities.ts b/src/fhir/questionnaireUtilities.ts index 109eb5b0..d424ebe7 100644 --- a/src/fhir/questionnaireUtilities.ts +++ b/src/fhir/questionnaireUtilities.ts @@ -103,17 +103,14 @@ export class QuestionnaireUtilities { } } static async fetchValueSetFromVSAC(url: string) { - const headers = new Headers(); const username = 'apikey'; const password = config.general.VsacApiKey; - headers.set( - 'Authorization', - 'Basic ' + Buffer.from(username + ':' + password).toString('base64') - ); - headers.set('Content-Type', 'application/json'); const response = await fetch(url, { method: 'GET', - headers: headers + headers: { + 'Authorization': `Basic ${Buffer.from(username + ':' + password).toString('base64')}`, + 'Content-Type': 'application/json' + } }); try { const body: ValueSet = await response.json(); From d74b3c399ddeedc181c254d2af7553a3a3434175 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 16:19:35 -0500 Subject: [PATCH 40/83] minor linting --- src/fhir/questionnaireUtilities.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/fhir/questionnaireUtilities.ts b/src/fhir/questionnaireUtilities.ts index d424ebe7..8e050ff6 100644 --- a/src/fhir/questionnaireUtilities.ts +++ b/src/fhir/questionnaireUtilities.ts @@ -8,10 +8,8 @@ import { Parameters, Questionnaire, QuestionnaireItem, - Resource, ValueSet } from 'fhir/r4'; -import { values } from 'lodash'; import constants from '../constants'; import { Globals } from '../globals'; import { FhirUtilities } from './utilities'; @@ -108,7 +106,7 @@ export class QuestionnaireUtilities { const response = await fetch(url, { method: 'GET', headers: { - 'Authorization': `Basic ${Buffer.from(username + ':' + password).toString('base64')}`, + Authorization: `Basic ${Buffer.from(username + ':' + password).toString('base64')}`, 'Content-Type': 'application/json' } }); @@ -127,7 +125,7 @@ export class QuestionnaireUtilities { // On load of new library, finds ValueSets in codefilters and // loads them as well static async processLibraryCodeFilters(library: Library, fetchedSets: ValueSetMap) { - const returnValue = []; + const returnValue: ValueSet[] = []; const dataReqs: DataRequirement[] = library.dataRequirement || []; for (const dataReq of dataReqs) { const filters = dataReq.codeFilter || []; From a89bbef693487852948f620b65adcc8520bfbf2e Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 16:35:25 -0500 Subject: [PATCH 41/83] switch to axios --- src/fhir/questionnaireUtilities.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/fhir/questionnaireUtilities.ts b/src/fhir/questionnaireUtilities.ts index 8e050ff6..75f3e15d 100644 --- a/src/fhir/questionnaireUtilities.ts +++ b/src/fhir/questionnaireUtilities.ts @@ -15,6 +15,7 @@ import { Globals } from '../globals'; import { FhirUtilities } from './utilities'; import container from '../lib/winston'; import config from '../config'; +import axios from 'axios' interface ResourceTable { [key: string]: FhirResource; @@ -103,7 +104,7 @@ export class QuestionnaireUtilities { static async fetchValueSetFromVSAC(url: string) { const username = 'apikey'; const password = config.general.VsacApiKey; - const response = await fetch(url, { + const response = await axios(url, { method: 'GET', headers: { Authorization: `Basic ${Buffer.from(username + ':' + password).toString('base64')}`, @@ -111,7 +112,7 @@ export class QuestionnaireUtilities { } }); try { - const body: ValueSet = await response.json(); + const body: ValueSet = await response.data; // the url returns with http but it should be https? This might be a product of not using the ticket API here // nevertheless, to search by url on our own database, the url must match what's in the library resource. // so here the http version of the url is replaced by the one used to fetch the resource (https version of the url) From 1e1b7d47b84e1800679563cf7729440e622c7866 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 17:00:54 -0500 Subject: [PATCH 42/83] linting --- src/fhir/questionnaireUtilities.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fhir/questionnaireUtilities.ts b/src/fhir/questionnaireUtilities.ts index 75f3e15d..5402ee24 100644 --- a/src/fhir/questionnaireUtilities.ts +++ b/src/fhir/questionnaireUtilities.ts @@ -15,7 +15,7 @@ import { Globals } from '../globals'; import { FhirUtilities } from './utilities'; import container from '../lib/winston'; import config from '../config'; -import axios from 'axios' +import axios from 'axios'; interface ResourceTable { [key: string]: FhirResource; @@ -81,7 +81,6 @@ export class QuestionnaireUtilities { // Input object fetchedLibraries modified to contain all related artifacts static async getAllRelatedLibraries(library: Library, fetchedLibraries: LibraryMap) { - const newLibraries = []; if (library.relatedArtifact) { for (const artifact of library.relatedArtifact) { if (artifact.type === 'depends-on' && artifact.resource) { From 4db4e55186c469855ac027938d627a2a340ecee4 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 26 Jan 2023 03:56:17 -0500 Subject: [PATCH 43/83] etasu changes --- docker-compose-dev.yml | 4 +- docker-sync.yml | 6 +- package.json | 1 + src/server.ts | 466 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 470 insertions(+), 7 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 475948e6..0cd28758 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -109,7 +109,7 @@ services: container_name: rems_dev_rems ports: # Port binding to host from docker container - - "9020:8090" # Bind port 3000 of host to 3000 of container + - "8090:8090" # Bind port 3000 of host to 3000 of container volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important @@ -184,7 +184,7 @@ volumes: # rems_dev_crd-server-bin: # rems_dev_crd-server-ValueSetCache: # rems_dev_crd-operations-build: - # rems_dev_crd-resources-build: + rems_dev_crd-resources-build: rems_dev_crd-request-generator-nodeModules: rems_dev_crd-request-generator-databaseData: rems_dev_crd-request-generator-build: diff --git a/docker-sync.yml b/docker-sync.yml index 0e24cbfa..9213f811 100644 --- a/docker-sync.yml +++ b/docker-sync.yml @@ -21,9 +21,9 @@ syncs: rems_dev_rems-sync: src: '.' - rems_dev_pharmacy-information-system-sync: - src: '../pharmacy-information-system' - sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] + # rems_dev_pharmacy-information-system-sync: + # src: '../pharmacy-information-system' + # sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] rems_dev_pims-sync: src: '../pims' diff --git a/package.json b/package.json index dafb56ff..55207d90 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "mongodb": "^4.12.1", "morgan": "^1.9.1", "tingodb": "^0.6.1", + "uid": "^2.0.1", "var": "^0.4.0", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.2.1" diff --git a/src/server.ts b/src/server.ts index 6e42122f..b5e46a05 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,13 +4,20 @@ import container from './lib/winston'; import morgan from 'morgan'; import Hook from './hooks/Hook'; import remsService from './hooks/rems.hook'; +// import etasuService from './services/etasu.service' import { Server } from '@projecttacoma/node-fhir-server-core'; +import { Globals } from './globals'; +import { uid } from 'uid'; + + + const logger = container.get('application'); const initialize = (config: any) => { //const logLevel = _.get(config, 'logging.level'); return new REMSServer(config.fhirServerConfig) + .configureEtasuEndpoints() .configureMiddleware() .configureSession() .configureHelmet() @@ -19,6 +26,7 @@ const initialize = (config: any) => { .setProfileRoutes() .registerCdsHooks(config.server) .setErrorRoutes(); + }; /** @@ -67,8 +75,8 @@ class REMSServer extends Server { log ? log : morgan('combined', { - stream: { write: message => logger.log(level, message) } - }) + stream: { write: message => logger.log(level, message) } + }) ); return this; @@ -98,6 +106,460 @@ class REMSServer extends Server { return this; } + configureEtasuEndpoints() { + // etasu endpoints + + + const db = Globals.database; + + // define schemas + const medicationCollection = db.createCollection("medication-requirements", { + "name": { "type": "string" }, + "codeSystem": { "type": "string" }, + "code": { "type": "string" }, + "requirements": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "description": { "type": "string" }, + "questionnaire": { "type": "object" }, + "stakeholderType": { "type": "string" }, + "createNewCase": { "type": "boolean" }, + "resourceId": { "type": "string" } + } + } + } + }, (err: any, collection: any) => { + if (err) console.log(err); + }); + + medicationCollection.createIndex({ name: 1 }, { unique: true }, (err: any) => { + if (err) console.log(err); + }); + + const metRequirementsCollection = db.createCollection("met-requirements", { + "completed": { "type": "boolean" }, + "completedQuestionnaire": { "type": "object" }, + "requirementName": { "type": "string" }, + "drugName": { "type": "string" }, + "stakeholderId": { "type": "string" }, + "duplicationId": { "type": "number" }, + "case_numbers": { "type": "array", "items": { "type": "string" } } + }, (err: any, collection: any) => { + if (err) console.log(err); + }); + + metRequirementsCollection.createIndex({ duplicationId: 1 }, { unique: true }, (err: any) => { + if (err) console.log(err); + }); + + + const remsCaseCollection = db.createCollection("rems-case", { + "case_number": { "type": "string" }, + "status": { "type": "string" }, + "drugName": { "type": "string" }, + "metRequirements": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metRequirementId": { "type": "number" }, + "completed": { "type": "boolean" }, + "stakeholderId": { "type": "string" }, + "requirementName": { "type": "string" }, + } + } + } + }, (err: any, collection: any) => { + if (err) throw err; + }); + + + // prepopulateDB + medicationCollection.insert([{ + name: "Turalio", + codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", + code: "2183126", + requirements: [{ + name: "Patient Enrollment", + description: "Submit Patient Enrollment form to the REMS Administrator", + stakeholderType: "patient", + createNewCase: true, + resourceId: "TuralioRemsPatientEnrollment", + }, + { + name: "Prescriber Enrollment", + description: "Submit Prescriber Enrollment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TuralioPrescriberEnrollmentForm", + }, + { + name: "Prescriber Knowledge Assessment", + description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TuralioPrescriberKnowledgeAssessment", + }, + { + name: "Pharmacist Enrollment", + description: "Submit Pharmacist Enrollment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + }, + ] + }, + { + name: "TIRF", + codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", + code: "1237051", + requirements: [{ + name: "Patient Enrollment", + description: "Submit Patient Enrollment form to the REMS Administrator", + stakeholderType: "patient", + createNewCase: true, + resourceId: "TIRFRemsPatientEnrollment", + }, + { + name: "Prescriber Enrollment", + description: "Submit Prescriber Enrollment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TIRFPrescriberEnrollmentForm", + }, + { + name: "Prescriber Knowledge Assessment", + description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TIRFPrescriberKnowledgeAssessment", + }, + { + name: "Pharmacist Enrollment", + description: "Submit Pharmacist Enrollment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + }, + { + name: "Pharmacist Knowledge Assessment", + description: "Submit Pharmacist Knowledge Assessment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + }, + ] + }, + { + name: "IPledge", + codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", + code: "6064", + requirements: [{ + name: "Patient Enrollment", + description: "Submit Patient Enrollment form to the REMS Administrator", + stakeholderType: "patient", + createNewCase: true, + resourceId: "IPledgeRemsPatientEnrollment", + }, + { + name: "Prescriber Enrollment", + description: "Submit Prescriber Enrollment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "IPledgeRemsPrescriberEnrollmentForm" + }, + { + name: "Pharmacist Enrollment", + description: "Submit Pharmacist Enrollment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + }, + ] + }, + ], (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Drug Information'); + }); + + metRequirementsCollection.insert([{ + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Enrollment", + drugName: "Turalio", + duplicationId: 1 + }, + { + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Enrollment", + drugName: "TIRF", + duplicationId: 2 + }, + { + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Knowledge Assessment", + drugName: "TIRF", + duplicationId: 3 + }, + { + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Enrollment", + drugName: "IPledge", + duplicationId: 4 + }], (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Pharmacist Met Requirements'); + }); + + this.app.get('/etasu/:drug', (req: any, res: { send: (arg0: string) => any }) => { + medicationCollection.findOne({ "name": req.params.drug }, (err: any, drug: any) => { + if (err) throw err; + res.send(drug); + }); + } + ); + + this.app.get('/etasu/met/:caseId', (req: any, res: { send: (arg0: string) => any }) => { + remsCaseCollection.findOne({ "case_number": req.params.caseId }, (err: any, remsCase: any) => { + if (err) throw err; + res.send(remsCase); + }); + } + ); + + this.app.post('/etasu/met', (req: any, res: { send: (arg0: string) => any }) => { + let returnedRemsRequestDoc: any; + let returnedMetReqDoc: any; + let returnRemsRequest = false; + const requestBody = req.body; + + + // extract params and questionnaire response identifier + let params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference.textValue); + let questionnaireResponse = this.getQuestionnaireResponse(requestBody); + let questionnaireStringArray = questionnaireResponse.questionnaire.split("/"); + let requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; + + // stakeholder and medication references + let prescriptionReference = ""; + let practitionerReference = ""; + let pharmacistReference = ""; + let patientReference = ""; + for (let param of params.parameter) { + if (param.name === "prescription") { + prescriptionReference = param.reference; + } + else if (param.name === "prescriber") { + practitionerReference = param.reference; + } + else if (param.name === "pharmacy") { + pharmacistReference = param.reference; + } else if (param.name === "source-patient") { + patientReference = param.reference; + } + } + + // obtain drug information from database + let presciption = this.getResource(requestBody, prescriptionReference); + let prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; + let prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; + const drug = medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem }); + + // iterate through each requirement of the drug + for (let requirement of drug.requirements) { + // figure out which stakeholder the req corresponds to + let reqStakeholder = requirement.stakeholderType; + let reqStakeholderReference = reqStakeholder.equals("prescriber") ? practitionerReference : (reqStakeholder.equals("pharmacist") ? pharmacistReference : patientReference); + + // if the requirement is the one submitted continue + if (requirement.resourceId.equals(requirementId)) { + + // if the req submitted is a patient enrollment form and requires creating a new case + if (requirement.createNewCase) { + returnRemsRequest = true; + const case_number = uid(); + + // create new rems request and add the created metReq to it + let remsRequestCompletedStatus = "Approved"; + let remsRequest: any = { + case_number: case_number, + status : remsRequestCompletedStatus, + drugName: drug.name, + requirements : [], + }; + returnRemsRequest = true; + + // create the metReq that was submitted + let metReq = { + completed: true, + completedQuestionnaire: questionnaireResponse, + requirementName: requirement.name, + drugName: drug.name, + stakeholderId: reqStakeholderReference, + case_numbers: [case_number], + }; + + const matchedMetReq = metRequirementsCollection.insert(metReq, (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Matched Met Requirement'); + }); + + remsRequest.requirements.push( + { + stakeholderId : matchedMetReq.stakeholderId, + completed : matchedMetReq.completed, + metRequirementId: matchedMetReq._id, + requirementName: matchedMetReq.requirementName, + } + ); + + // iterate through all other reqs again to create corresponding false metReqs / assign to existing + for (let requirement2 of drug.requirements) { + // skip if the req found is the same as in the outer loop and has already been processed + if (!requirement2.resourceId.equals(requirementId)) { + // figure out which stakeholder the req corresponds to + let reqStakeholder2 = requirement2.stakeholderType; + let reqStakeholder2Reference = reqStakeholder2.equals("prescriber") ? practitionerReference : (reqStakeholder2.equals("pharmacist") ? pharmacistReference : patientReference); + + const matchedMetReq2 = metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); + if (matchedMetReq2) { + remsRequest.requirements.push( + { + stakeholderId : matchedMetReq2.stakeholderId, + completed : matchedMetReq2.completed, + metRequirementId: matchedMetReq2._id, + requirementName: matchedMetReq2.requirementName, + } + ); + if(!matchedMetReq2.completed) { + remsRequestCompletedStatus = "Pending"; + } + matchedMetReq2.case_numbers.push(case_number); + metRequirementsCollection.update({_id: matchedMetReq2._id}, matchedMetReq2); + } else { + // create the metReq that was submitted + let newMetReq = { + completed: false, + completedQuestionnaire: null, + requirementName: requirement2.name, + drugName: drug.name, + stakeholderId: reqStakeholder2Reference, + case_numbers: [case_number], + }; + + remsRequestCompletedStatus = "Pending"; + + const newMetReqDoc = metRequirementsCollection.insert(newMetReq, (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted New Met Requirement'); + }); + + remsRequest.requirements.push( + { + stakeholderId : newMetReqDoc.stakeholderId, + completed : newMetReqDoc.completed, + metRequirementId: newMetReqDoc._id, + requirementName: newMetReqDoc.requirementName, + } + ); + } + } + } + + remsRequest.status = remsRequestCompletedStatus; + returnedRemsRequestDoc = remsCaseCollection.insert(remsRequest, (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Rems Case'); + }); + } else { + const matchedMetReq3 = metRequirementsCollection.findOne({stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name}); + if (matchedMetReq3) { + matchedMetReq3.completed = true; + matchedMetReq3.completedQuestionnaire = questionnaireResponse; + returnedMetReqDoc = metRequirementsCollection.update({_id: matchedMetReq3._id}, matchedMetReq3); + + const remsRequestsToUpdate = remsCaseCollection.find({case_number: {$in: matchedMetReq3.case_numbers}}) + + for (let remsRequestToUpdate of remsRequestsToUpdate) { + let foundUncompleted = false; + remsRequestToUpdate.requirements.forEach((req4: any) => { + if(req4.metRequirementId.equals(matchedMetReq3._id)) { + req4.completed = true; + } + if(!req4.completed){ + foundUncompleted = true; + } + }); + + if(!foundUncompleted && remsRequestToUpdate.status.equals("Pending")) { + remsRequestToUpdate.status = "Approved"; + } + + remsCaseCollection.update({_id: remsRequestToUpdate._id}, remsRequestToUpdate); + + } + + } else { + // create the metReq that was submitted + let newMetReq3 = { + completed: true, + completedQuestionnaire: questionnaireResponse, + requirementName: requirement.name, + drugName: drug.name, + stakeholderId: reqStakeholderReference, + case_numbers: [], + }; + + returnedMetReqDoc = metRequirementsCollection.insert(newMetReq3, (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted New Met Requirement'); + }); + } + } + break; + } + } + + // return MetReq unless a new case is created in which case return the Rems request + if (returnRemsRequest) { + res.send(returnedRemsRequestDoc); + } else { + res.send(returnedRemsRequestDoc); + } + }); + + return this; + } + + getResource(bundle: { entry: any[]; }, resourceReference: string) { + let temp = resourceReference.split("/"); + let _resourceType = temp[0]; + let _id = temp[1]; + + for (let i = 0; i < bundle.entry.length; i++) { + if ((bundle.entry[i].resource.resourceType === _resourceType) + && (bundle.entry[i].resource.id === _id)) { + return bundle.entry[i].resource; + } + } + return null; + } + + getQuestionnaireResponse(bundle: { entry: any[]; }) { + let _resourceType = "QuestionnaireResponse"; + + for (let i = 0; i < bundle.entry.length; i++) { + if ((bundle.entry[i].resource.resourceType === _resourceType)) { + return bundle.entry[i].resource; + } + } + return null; + } + + + /** * @method listen * @description Start listening on the configured port From 18ca68c01437074ce2c1a81fe81cf46e13c30053 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 26 Jan 2023 05:49:16 -0500 Subject: [PATCH 44/83] changed. equal to === and added async/await --- src/server.ts | 85 +++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/src/server.ts b/src/server.ts index b5e46a05..03a7a901 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,7 +4,6 @@ import container from './lib/winston'; import morgan from 'morgan'; import Hook from './hooks/Hook'; import remsService from './hooks/rems.hook'; -// import etasuService from './services/etasu.service' import { Server } from '@projecttacoma/node-fhir-server-core'; import { Globals } from './globals'; import { uid } from 'uid'; @@ -17,7 +16,6 @@ const logger = container.get('application'); const initialize = (config: any) => { //const logLevel = _.get(config, 'logging.level'); return new REMSServer(config.fhirServerConfig) - .configureEtasuEndpoints() .configureMiddleware() .configureSession() .configureHelmet() @@ -25,6 +23,7 @@ const initialize = (config: any) => { .setPublicDirectory() .setProfileRoutes() .registerCdsHooks(config.server) + .configureEtasuEndpoints() .setErrorRoutes(); }; @@ -329,15 +328,14 @@ class REMSServer extends Server { } ); - this.app.post('/etasu/met', (req: any, res: { send: (arg0: string) => any }) => { + this.app.post('/etasu/met', async (req: any, res: { send: (arg0: string) => any }) => { let returnedRemsRequestDoc: any; let returnedMetReqDoc: any; let returnRemsRequest = false; const requestBody = req.body; - // extract params and questionnaire response identifier - let params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference.textValue); + let params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); let questionnaireResponse = this.getQuestionnaireResponse(requestBody); let questionnaireStringArray = questionnaireResponse.questionnaire.split("/"); let requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; @@ -365,16 +363,23 @@ class REMSServer extends Server { let presciption = this.getResource(requestBody, prescriptionReference); let prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; let prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; - const drug = medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem }); - + + const drug = await medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem } + // , (err: any, result: any) => { + // if (err) console.log(err); + // console.log('Found Drug Info: '); + // console.log(result) + // return result; + // } + ); // iterate through each requirement of the drug for (let requirement of drug.requirements) { // figure out which stakeholder the req corresponds to let reqStakeholder = requirement.stakeholderType; - let reqStakeholderReference = reqStakeholder.equals("prescriber") ? practitionerReference : (reqStakeholder.equals("pharmacist") ? pharmacistReference : patientReference); + let reqStakeholderReference = reqStakeholder === "prescriber" ? practitionerReference : (reqStakeholder === "pharmacist" ? pharmacistReference : patientReference); // if the requirement is the one submitted continue - if (requirement.resourceId.equals(requirementId)) { + if (requirement.resourceId === requirementId) { // if the req submitted is a patient enrollment form and requires creating a new case if (requirement.createNewCase) { @@ -401,10 +406,12 @@ class REMSServer extends Server { case_numbers: [case_number], }; - const matchedMetReq = metRequirementsCollection.insert(metReq, (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted Matched Met Requirement'); - }); + const matchedMetReq = await metRequirementsCollection.insert(metReq + // , (err: any, result: any) => { + // if (err) console.log(err); + // console.log('Inserted Matched Met Requirement'); + // } + ); remsRequest.requirements.push( { @@ -418,12 +425,12 @@ class REMSServer extends Server { // iterate through all other reqs again to create corresponding false metReqs / assign to existing for (let requirement2 of drug.requirements) { // skip if the req found is the same as in the outer loop and has already been processed - if (!requirement2.resourceId.equals(requirementId)) { + if (!requirement2.resourceId === requirementId) { // figure out which stakeholder the req corresponds to let reqStakeholder2 = requirement2.stakeholderType; - let reqStakeholder2Reference = reqStakeholder2.equals("prescriber") ? practitionerReference : (reqStakeholder2.equals("pharmacist") ? pharmacistReference : patientReference); + let reqStakeholder2Reference = reqStakeholder2 === "prescriber" ? practitionerReference : (reqStakeholder2 === "pharmacist" ? pharmacistReference : patientReference); - const matchedMetReq2 = metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); + const matchedMetReq2 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); if (matchedMetReq2) { remsRequest.requirements.push( { @@ -437,7 +444,7 @@ class REMSServer extends Server { remsRequestCompletedStatus = "Pending"; } matchedMetReq2.case_numbers.push(case_number); - metRequirementsCollection.update({_id: matchedMetReq2._id}, matchedMetReq2); + await metRequirementsCollection.update({_id: matchedMetReq2._id}, matchedMetReq2); } else { // create the metReq that was submitted let newMetReq = { @@ -451,10 +458,12 @@ class REMSServer extends Server { remsRequestCompletedStatus = "Pending"; - const newMetReqDoc = metRequirementsCollection.insert(newMetReq, (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted New Met Requirement'); - }); + const newMetReqDoc = await metRequirementsCollection.insert(newMetReq + // , (err: any, result: any) => { + // if (err) console.log(err); + // console.log('Inserted New Met Requirement'); + // } + ); remsRequest.requirements.push( { @@ -469,23 +478,25 @@ class REMSServer extends Server { } remsRequest.status = remsRequestCompletedStatus; - returnedRemsRequestDoc = remsCaseCollection.insert(remsRequest, (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted Rems Case'); - }); + returnedRemsRequestDoc = await remsCaseCollection.insert(remsRequest + // , (err: any, result: any) => { + // if (err) console.log(err); + // console.log('Inserted Rems Case'); + // } + ); } else { - const matchedMetReq3 = metRequirementsCollection.findOne({stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name}); + const matchedMetReq3 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name}); if (matchedMetReq3) { matchedMetReq3.completed = true; matchedMetReq3.completedQuestionnaire = questionnaireResponse; - returnedMetReqDoc = metRequirementsCollection.update({_id: matchedMetReq3._id}, matchedMetReq3); + returnedMetReqDoc = await metRequirementsCollection.update({_id: matchedMetReq3._id}, matchedMetReq3); - const remsRequestsToUpdate = remsCaseCollection.find({case_number: {$in: matchedMetReq3.case_numbers}}) + const remsRequestsToUpdate = await remsCaseCollection.find({case_number: {$in: matchedMetReq3.case_numbers}}) for (let remsRequestToUpdate of remsRequestsToUpdate) { let foundUncompleted = false; remsRequestToUpdate.requirements.forEach((req4: any) => { - if(req4.metRequirementId.equals(matchedMetReq3._id)) { + if(req4.metRequirementId === matchedMetReq3._id) { req4.completed = true; } if(!req4.completed){ @@ -493,11 +504,11 @@ class REMSServer extends Server { } }); - if(!foundUncompleted && remsRequestToUpdate.status.equals("Pending")) { + if(!foundUncompleted && remsRequestToUpdate.status === "Pending") { remsRequestToUpdate.status = "Approved"; } - remsCaseCollection.update({_id: remsRequestToUpdate._id}, remsRequestToUpdate); + await remsCaseCollection.update({_id: remsRequestToUpdate._id}, remsRequestToUpdate); } @@ -512,10 +523,12 @@ class REMSServer extends Server { case_numbers: [], }; - returnedMetReqDoc = metRequirementsCollection.insert(newMetReq3, (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted New Met Requirement'); - }); + returnedMetReqDoc = await metRequirementsCollection.insert(newMetReq3 + // , (err: any, result: any) => { + // if (err) console.log(err); + // console.log('Inserted New Met Requirement'); + // } + ); } } break; @@ -526,7 +539,7 @@ class REMSServer extends Server { if (returnRemsRequest) { res.send(returnedRemsRequestDoc); } else { - res.send(returnedRemsRequestDoc); + res.send(returnedMetReqDoc); } }); From 450713663c6dc1cc9761dcba6dc92fcf2737b3e5 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Fri, 9 Dec 2022 19:14:00 -0500 Subject: [PATCH 45/83] add hydration --- src/hooks/Prefetch/OrderSignPrefetch.ts | 6 +- .../Prefetch/OrderSignRequestPrefetch.ts | 5 +- src/hooks/Prefetch/RequestPrefetch.ts | 2 +- .../Prefetch/hydrator/PrefetchHydrator.ts | 73 +++++++++ src/hooks/rems.hook.test.ts | 1 - src/hooks/rems.hook.ts | 138 +++++++++--------- 6 files changed, 148 insertions(+), 77 deletions(-) create mode 100644 src/hooks/Prefetch/hydrator/PrefetchHydrator.ts diff --git a/src/hooks/Prefetch/OrderSignPrefetch.ts b/src/hooks/Prefetch/OrderSignPrefetch.ts index 08d7a453..3f992c09 100644 --- a/src/hooks/Prefetch/OrderSignPrefetch.ts +++ b/src/hooks/Prefetch/OrderSignPrefetch.ts @@ -1,5 +1,5 @@ export default interface OrderSignPrefetch { - patient?: string; - request?: string; - practitioner?: string; + [key: string]: string; + patient: string; + practitioner: string; } diff --git a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts index 39b37738..5894a94a 100644 --- a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts +++ b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts @@ -1,7 +1,6 @@ import { MedicationRequest, Patient, Practitioner } from 'fhir/r4'; import RequestPrefetch from './RequestPrefetch'; export default interface OrderSignRequestPrefetch extends RequestPrefetch { - patient: Patient; - request: MedicationRequest; - practitioner: Practitioner; + patient?: Patient; + practitioner?: Practitioner; } diff --git a/src/hooks/Prefetch/RequestPrefetch.ts b/src/hooks/Prefetch/RequestPrefetch.ts index efd8714d..82ce49aa 100644 --- a/src/hooks/Prefetch/RequestPrefetch.ts +++ b/src/hooks/Prefetch/RequestPrefetch.ts @@ -1,5 +1,5 @@ import { Resource } from 'fhir/r4'; export default interface RequestPrefetch { - [key: string]: Resource; + [key: string]: Resource | undefined; } diff --git a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts new file mode 100644 index 00000000..3c2f2660 --- /dev/null +++ b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts @@ -0,0 +1,73 @@ +import OrderSignRequest from '../../OrderSignRequest'; +import OrderSignPrefetch from '../OrderSignPrefetch'; +import OrderSignRequestPrefetch from '../OrderSignRequestPrefetch'; +function jsonPath(json: any, path: string) { + // Use a regular expression to find array accessors in the form of "[i]" + const arrayRegex = /\[(\d+)\]/g; + + // Use the regex to find all the array accessors in the path + let match; + while ((match = arrayRegex.exec(path)) !== null) { + // Get the index of the array element to access + const index = match[1]; + + // Use the index to replace the array accessor in the path with the corresponding property accessor + path = path.replace(match[0], `.${index}`); + } + + // Split the path into its individual components + const pathComponents = path.split('.'); + + // Use reduce to iterate over the path components and get the corresponding value from the JSON object + return pathComponents.reduce((obj, key) => { + // If the key doesn't exist, return undefined + if (!obj || !Object.prototype.hasOwnProperty.call(obj, key)) return undefined; + + // Otherwise, return the value at the key + return obj[key]; + }, json); +} +function replaceTokens(str: string, json: any): string { + // Use a regular expression to find tokens in the form of "{{token}}" + const tokenRegex = /{{([\w.]+)}}/g; + + // Use the regex to find all the tokens in the string + let match; + while ((match = tokenRegex.exec(str)) !== null) { + // Get the token from the match + const token = match[1]; + + // Use the token to get the corresponding value from the JSON object + const value = jsonPath(json, token); + + // Replace the token in the original string with the value + str = str.replace(match[0], value); + } + + // Return the modified string + return str; +} +function resolveToken(token: string, context: OrderSignRequest) { + const fulfilledToken = replaceTokens(token, context); + const ehrUrl = `${context.fhirServer}/${fulfilledToken}`; + const response = fetch(ehrUrl); + return response.then((e) => {return e.json();}); +} +function hydrate(template: OrderSignPrefetch, request: OrderSignRequest) { + let prefetch = request.prefetch; + if(!prefetch) { + prefetch = {}; + } + const promises = Object.keys(template).map((key) => { + if(!Object.prototype.hasOwnProperty.call(prefetch, key)) { + // prefetch was not fulfilled + return resolveToken(template[key], request).then((data) => { + Object.assign(prefetch, { [key]: data }); + }); + } + }); + + return Promise.all(promises).then(() => prefetch); + +} +export {hydrate}; \ No newline at end of file diff --git a/src/hooks/rems.hook.test.ts b/src/hooks/rems.hook.test.ts index fa75f45b..488f41be 100644 --- a/src/hooks/rems.hook.test.ts +++ b/src/hooks/rems.hook.test.ts @@ -5,7 +5,6 @@ describe('hook: test rems', () => { test('should have definition and handler', () => { const prefetch = { patient: 'Patient/{{context.patientId}}', - request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', practitioner: 'Practitioner/{{context.userId}}' }; const expectedDefinition = new OrderSign( diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index 37c183ed..adb62641 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -5,6 +5,7 @@ import OrderSignPrefetch from './Prefetch/OrderSignPrefetch'; import { Coding } from 'fhir/r4'; import { Link } from '../cards/Card'; import config from '../config'; +import { hydrate } from './Prefetch/hydrator/PrefetchHydrator'; const CARD_DETAILS = 'Documentation Required, please complete form via Smart App link.'; // TODO: this codemap should be replaced with a system similar to original CRD's questionnaire package operation @@ -135,9 +136,8 @@ interface TypedRequestBody extends Express.Request { body: OrderSignRequest; } -const prefetch: OrderSignPrefetch = { +const hookPrefetch: OrderSignPrefetch = { patient: 'Patient/{{context.patientId}}', - request: 'MedicationRequest?_id={{context.draftOrders.MedicationRequest.id}}', practitioner: 'Practitioner/{{context.userId}}' }; const definition = new OrderSign( @@ -145,7 +145,7 @@ const definition = new OrderSign( 'order-sign', 'REMS Requirement Lookup', 'REMS Requirement Lookup', - prefetch + hookPrefetch ); const source = { label: 'MCODE REMS Administrator Prototype', @@ -162,80 +162,80 @@ function buildErrorCard(reason: string) { const handler = (req: TypedRequestBody, res: any) => { console.log('REMS order-sign hook'); try { - const context = req.body.context; - const contextRequest = context.draftOrders?.entry?.[0].resource; - const prefetch = req.body.prefetch; - const patient = prefetch?.patient; - const prefetchRequest = prefetch?.request; - const practitioner = prefetch?.practitioner; - const npi = practitioner?.identifier; + hydrate(hookPrefetch, req.body).then((hydratedPrefetch) => { + const context = req.body.context; + const contextRequest = context.draftOrders?.entry?.[0].resource; + const patient = hydratedPrefetch?.patient; + const prefetchRequest = hydratedPrefetch?.request; + const practitioner = hydratedPrefetch?.practitioner; + const npi = practitioner?.identifier; - console.log(' MedicationRequest: ' + prefetchRequest?.id); - console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); - console.log(' Patient: ' + patient?.id); - // verify a MedicationRequest was sent - if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { - res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); - return; - } + console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); + console.log(' Patient: ' + patient?.id); - // verify ids - if ( - patient?.id && - patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') - ) { - res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); - return; - } - if ( - practitioner?.id && - practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') - ) { - res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); - return; - } - if ( - prefetchRequest?.id && - contextRequest && - contextRequest.id && - prefetchRequest.id.replace('MedicationRequest/', '') !== + // verify a MedicationRequest was sent + if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { + res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); + return; + } + + // verify ids + if ( + patient?.id && + patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') + ) { + res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); + return; + } + if ( + practitioner?.id && + practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') + ) { + res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); + return; + } + if ( + prefetchRequest?.id && + contextRequest && + contextRequest.id && + prefetchRequest.id.replace('MedicationRequest/', '') !== contextRequest.id.replace('MedicationRequest/', '') - ) { - res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); - return; - } + ) { + res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); + return; + } - const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; - if (medicationCode && medicationCode.code) { - const returnCard = validCodes.some(e => { - return e.code === medicationCode.code && e.system === medicationCode.system; - }); - if (returnCard) { - const card = new Card(medicationCode.display || 'Rems', CARD_DETAILS, source, 'info'); - const links = codeMap[medicationCode.code]; - links.forEach(e => { - if (e.type == 'absolute') { - // no construction needed - card.addLink(e); - } else { - // link is SMART - // TODO: smart links should be built with discovered questionnaires, not hard coded ones - e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ - contextRequest.insurance?.[0].reference - }`; - card.addLink(e); - } - }); - res.json({ - cards: [card] + const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; + if (medicationCode && medicationCode.code) { + const returnCard = validCodes.some(e => { + return e.code === medicationCode.code && e.system === medicationCode.system; }); + if (returnCard) { + const card = new Card(medicationCode.display || 'Rems', CARD_DETAILS, source, 'info'); + const links = codeMap[medicationCode.code]; + links.forEach(e => { + if (e.type == 'absolute') { + // no construction needed + card.addLink(e); + } else { + // link is SMART + // TODO: smart links should be built with discovered questionnaires, not hard coded ones + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${contextRequest.insurance?.[0].reference + }`; + card.addLink(e); + } + }); + res.json({ + cards: [card] + }); + } else { + res.json(buildErrorCard('Unsupported code')); + } } else { - res.json(buildErrorCard('Unsupported code')); + res.json(buildErrorCard('MedicationRequest does not contain a code')); } - } else { - res.json(buildErrorCard('MedicationRequest does not contain a code')); - } + }); } catch (error) { console.log(error); res.json(buildErrorCard('Unknown Error')); From 0c2f12393caec3ed485626fd48d4027ed61b9341 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Fri, 9 Dec 2022 19:21:29 -0500 Subject: [PATCH 46/83] add access token --- src/hooks/OrderSignRequest.ts | 1 + src/hooks/Prefetch/hydrator/PrefetchHydrator.ts | 11 ++++++++++- src/hooks/rems.hook.ts | 2 -- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/hooks/OrderSignRequest.ts b/src/hooks/OrderSignRequest.ts index 1a69b90a..d75b04cf 100644 --- a/src/hooks/OrderSignRequest.ts +++ b/src/hooks/OrderSignRequest.ts @@ -3,6 +3,7 @@ import { Url } from 'url'; import OrderSignRequestPrefetch from './Prefetch/OrderSignRequestPrefetch'; // https://cds-hooks.hl7.org/1.0/#fhir-resource-access interface FhirAuthorization { + access_token: string; token_type: string; expires_in: number; scope: string; diff --git a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts index 3c2f2660..a30b15cd 100644 --- a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts +++ b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts @@ -50,7 +50,14 @@ function replaceTokens(str: string, json: any): string { function resolveToken(token: string, context: OrderSignRequest) { const fulfilledToken = replaceTokens(token, context); const ehrUrl = `${context.fhirServer}/${fulfilledToken}`; - const response = fetch(ehrUrl); + const access_token = context.fhirAuthorization.access_token; + const options = { + method: 'GET', + headers: { + 'Authorization': `Bearer ${access_token}`, + }, + }; + const response = fetch(ehrUrl, options); return response.then((e) => {return e.json();}); } function hydrate(template: OrderSignPrefetch, request: OrderSignRequest) { @@ -58,6 +65,8 @@ function hydrate(template: OrderSignPrefetch, request: OrderSignRequest) { if(!prefetch) { prefetch = {}; } + // Find unfulfilled prefetch elements and resolve them using + // the defined prefetch template const promises = Object.keys(template).map((key) => { if(!Object.prototype.hasOwnProperty.call(prefetch, key)) { // prefetch was not fulfilled diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index adb62641..b9520cba 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -169,8 +169,6 @@ const handler = (req: TypedRequestBody, res: any) => { const prefetchRequest = hydratedPrefetch?.request; const practitioner = hydratedPrefetch?.practitioner; const npi = practitioner?.identifier; - - console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); console.log(' Patient: ' + patient?.id); From 326b665807bfcec83d75c8fac1ca3f2f2a45e066 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Fri, 9 Dec 2022 19:29:34 -0500 Subject: [PATCH 47/83] prettier --- .../Prefetch/hydrator/PrefetchHydrator.ts | 139 +++++++++--------- src/hooks/rems.hook.ts | 9 +- 2 files changed, 75 insertions(+), 73 deletions(-) diff --git a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts index a30b15cd..690546c5 100644 --- a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts +++ b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts @@ -2,81 +2,82 @@ import OrderSignRequest from '../../OrderSignRequest'; import OrderSignPrefetch from '../OrderSignPrefetch'; import OrderSignRequestPrefetch from '../OrderSignRequestPrefetch'; function jsonPath(json: any, path: string) { - // Use a regular expression to find array accessors in the form of "[i]" - const arrayRegex = /\[(\d+)\]/g; - - // Use the regex to find all the array accessors in the path - let match; - while ((match = arrayRegex.exec(path)) !== null) { - // Get the index of the array element to access - const index = match[1]; - - // Use the index to replace the array accessor in the path with the corresponding property accessor - path = path.replace(match[0], `.${index}`); - } - - // Split the path into its individual components - const pathComponents = path.split('.'); - - // Use reduce to iterate over the path components and get the corresponding value from the JSON object - return pathComponents.reduce((obj, key) => { - // If the key doesn't exist, return undefined - if (!obj || !Object.prototype.hasOwnProperty.call(obj, key)) return undefined; - - // Otherwise, return the value at the key - return obj[key]; - }, json); + // Use a regular expression to find array accessors in the form of "[i]" + const arrayRegex = /\[(\d+)\]/g; + + // Use the regex to find all the array accessors in the path + let match; + while ((match = arrayRegex.exec(path)) !== null) { + // Get the index of the array element to access + const index = match[1]; + + // Use the index to replace the array accessor in the path with the corresponding property accessor + path = path.replace(match[0], `.${index}`); + } + + // Split the path into its individual components + const pathComponents = path.split('.'); + + // Use reduce to iterate over the path components and get the corresponding value from the JSON object + return pathComponents.reduce((obj, key) => { + // If the key doesn't exist, return undefined + if (!obj || !Object.prototype.hasOwnProperty.call(obj, key)) return undefined; + + // Otherwise, return the value at the key + return obj[key]; + }, json); } function replaceTokens(str: string, json: any): string { - // Use a regular expression to find tokens in the form of "{{token}}" - const tokenRegex = /{{([\w.]+)}}/g; - - // Use the regex to find all the tokens in the string - let match; - while ((match = tokenRegex.exec(str)) !== null) { - // Get the token from the match - const token = match[1]; - - // Use the token to get the corresponding value from the JSON object - const value = jsonPath(json, token); - - // Replace the token in the original string with the value - str = str.replace(match[0], value); - } - - // Return the modified string - return str; + // Use a regular expression to find tokens in the form of "{{token}}" + const tokenRegex = /{{([\w.]+)}}/g; + + // Use the regex to find all the tokens in the string + let match; + while ((match = tokenRegex.exec(str)) !== null) { + // Get the token from the match + const token = match[1]; + + // Use the token to get the corresponding value from the JSON object + const value = jsonPath(json, token); + + // Replace the token in the original string with the value + str = str.replace(match[0], value); + } + + // Return the modified string + return str; } function resolveToken(token: string, context: OrderSignRequest) { - const fulfilledToken = replaceTokens(token, context); - const ehrUrl = `${context.fhirServer}/${fulfilledToken}`; - const access_token = context.fhirAuthorization.access_token; - const options = { - method: 'GET', - headers: { - 'Authorization': `Bearer ${access_token}`, - }, - }; - const response = fetch(ehrUrl, options); - return response.then((e) => {return e.json();}); + const fulfilledToken = replaceTokens(token, context); + const ehrUrl = `${context.fhirServer}/${fulfilledToken}`; + const access_token = context.fhirAuthorization.access_token; + const options = { + method: 'GET', + headers: { + Authorization: `Bearer ${access_token}` + } + }; + const response = fetch(ehrUrl, options); + return response.then(e => { + return e.json(); + }); } function hydrate(template: OrderSignPrefetch, request: OrderSignRequest) { - let prefetch = request.prefetch; - if(!prefetch) { - prefetch = {}; + let prefetch = request.prefetch; + if (!prefetch) { + prefetch = {}; + } + // Find unfulfilled prefetch elements and resolve them using + // the defined prefetch template + const promises = Object.keys(template).map(key => { + if (!Object.prototype.hasOwnProperty.call(prefetch, key)) { + // prefetch was not fulfilled + return resolveToken(template[key], request).then(data => { + Object.assign(prefetch, { [key]: data }); + }); } - // Find unfulfilled prefetch elements and resolve them using - // the defined prefetch template - const promises = Object.keys(template).map((key) => { - if(!Object.prototype.hasOwnProperty.call(prefetch, key)) { - // prefetch was not fulfilled - return resolveToken(template[key], request).then((data) => { - Object.assign(prefetch, { [key]: data }); - }); - } - }); - - return Promise.all(promises).then(() => prefetch); + }); + return Promise.all(promises).then(() => prefetch); } -export {hydrate}; \ No newline at end of file +export { hydrate }; diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index b9520cba..99d9a299 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -162,7 +162,7 @@ function buildErrorCard(reason: string) { const handler = (req: TypedRequestBody, res: any) => { console.log('REMS order-sign hook'); try { - hydrate(hookPrefetch, req.body).then((hydratedPrefetch) => { + hydrate(hookPrefetch, req.body).then(hydratedPrefetch => { const context = req.body.context; const contextRequest = context.draftOrders?.entry?.[0].resource; const patient = hydratedPrefetch?.patient; @@ -198,7 +198,7 @@ const handler = (req: TypedRequestBody, res: any) => { contextRequest && contextRequest.id && prefetchRequest.id.replace('MedicationRequest/', '') !== - contextRequest.id.replace('MedicationRequest/', '') + contextRequest.id.replace('MedicationRequest/', '') ) { res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); return; @@ -219,8 +219,9 @@ const handler = (req: TypedRequestBody, res: any) => { } else { // link is SMART // TODO: smart links should be built with discovered questionnaires, not hard coded ones - e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${contextRequest.insurance?.[0].reference - }`; + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ + contextRequest.insurance?.[0].reference + }`; card.addLink(e); } }); From cea50543d53e63a84bd620f1b598cd5f32775ae4 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 16:05:29 -0500 Subject: [PATCH 48/83] some linting --- src/hooks/Prefetch/OrderSignRequestPrefetch.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts index 5894a94a..1424b01d 100644 --- a/src/hooks/Prefetch/OrderSignRequestPrefetch.ts +++ b/src/hooks/Prefetch/OrderSignRequestPrefetch.ts @@ -1,4 +1,4 @@ -import { MedicationRequest, Patient, Practitioner } from 'fhir/r4'; +import { Patient, Practitioner } from 'fhir/r4'; import RequestPrefetch from './RequestPrefetch'; export default interface OrderSignRequestPrefetch extends RequestPrefetch { patient?: Patient; From c63859826255ddfdd8bf3e4a90be890a627cd7b4 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 16:58:45 -0500 Subject: [PATCH 49/83] switch to axios --- src/hooks/Prefetch/hydrator/PrefetchHydrator.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts index 690546c5..e46ed7a0 100644 --- a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts +++ b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts @@ -1,6 +1,6 @@ import OrderSignRequest from '../../OrderSignRequest'; import OrderSignPrefetch from '../OrderSignPrefetch'; -import OrderSignRequestPrefetch from '../OrderSignRequestPrefetch'; +import axios from 'axios' function jsonPath(json: any, path: string) { // Use a regular expression to find array accessors in the form of "[i]" const arrayRegex = /\[(\d+)\]/g; @@ -57,9 +57,9 @@ function resolveToken(token: string, context: OrderSignRequest) { Authorization: `Bearer ${access_token}` } }; - const response = fetch(ehrUrl, options); + const response = axios(ehrUrl, options); return response.then(e => { - return e.json(); + return e.data; }); } function hydrate(template: OrderSignPrefetch, request: OrderSignRequest) { From 4ca10e0ff9afd01796a2137efc02aaa7584e0e36 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Wed, 25 Jan 2023 17:06:44 -0500 Subject: [PATCH 50/83] lint --- src/hooks/Prefetch/hydrator/PrefetchHydrator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts index e46ed7a0..09bf3cee 100644 --- a/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts +++ b/src/hooks/Prefetch/hydrator/PrefetchHydrator.ts @@ -1,6 +1,6 @@ import OrderSignRequest from '../../OrderSignRequest'; import OrderSignPrefetch from '../OrderSignPrefetch'; -import axios from 'axios' +import axios from 'axios'; function jsonPath(json: any, path: string) { // Use a regular expression to find array accessors in the form of "[i]" const arrayRegex = /\[(\d+)\]/g; From 93343c2dba00558b085e828fd722cd0aab2299e2 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Thu, 26 Jan 2023 11:10:10 -0500 Subject: [PATCH 51/83] add prescriber forms --- src/hooks/rems.hook.ts | 416 ++++++++++++++++++++++++++--------------- 1 file changed, 269 insertions(+), 147 deletions(-) diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index 99d9a299..ae250187 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -7,112 +7,227 @@ import { Link } from '../cards/Card'; import config from '../config'; import { hydrate } from './Prefetch/hydrator/PrefetchHydrator'; +interface CardRule { + links: Link[] + summary?: string +} const CARD_DETAILS = 'Documentation Required, please complete form via Smart App link.'; // TODO: this codemap should be replaced with a system similar to original CRD's questionnaire package operation // the app doesn't necessarily have to use CQL for this. -const codeMap: { [key: string]: Link[] } = { - '2183126': [ - { - label: 'Documentation Requirements', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf' - ) - }, - { - label: 'Medication Guide', - type: 'absolute', - url: new URL( - 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true' - ) - }, - { - label: 'Patient Guide', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf' - ) - }, - { - label: 'Patient Status Update Form', - appContext: - 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus', - type: 'smart', - url: new URL(config.smart.endpoint) - }, - { - label: 'Patient Enrollment Form', - appContext: - 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment', - type: 'smart', - url: new URL(config.smart.endpoint) - } +const codeMap: { [key: string]: CardRule[] } = { + '2183126': [{ + links: [ + { + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf' + ) + }, + { + label: 'Medication Guide', + type: 'absolute', + url: new URL( + 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true' + ) + }, + { + label: 'Patient Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf' + ) + }, + { + label: 'Patient Status Update Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus', + type: 'smart', + url: new URL(config.smart.endpoint) + }, + { + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) + } + ], + }, + { + links: + [ + { + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio&inline=true' + ) + }, + { + label: 'Program Overview', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Program_Overview.pdf' + ) + }, + { + label: 'Prescriber Training', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Prescriber_Training.pdf' + ) + }, + { + label: 'Prescriber Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberEnrollmentForm', + type: 'smart', + url: new URL(config.smart.endpoint) + }, + { + label: 'Prescriber Knowledge Assessment', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberKnowledgeAssessment', + type: 'smart', + url: new URL(config.smart.endpoint) + }, + ], + summary: "Prescriber Forms" + } ], '6064': [ { - label: 'Documentation Requirements', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_REMS_Document.pdf' - ) - }, - { - label: 'Fact Sheet', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Fact_Sheet.pdf' - ) - }, - { - label: 'Guide For Patients Who Can Get Pregnant', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Guide_for_Patients_Who_Can_Get_pregnant.pdf' - ) - }, - { - label: 'Contraceptive Counseling Guide', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Contraception_Counseling_Guide.pdf' - ) + links: [ + { + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_REMS_Document.pdf' + ) + }, + { + label: 'Fact Sheet', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Fact_Sheet.pdf' + ) + }, + { + label: 'Guide For Patients Who Can Get Pregnant', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Guide_for_Patients_Who_Can_Get_pregnant.pdf' + ) + }, + { + label: 'Contraceptive Counseling Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Contraception_Counseling_Guide.pdf' + ) + }, + { + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) + } + ], }, { - label: 'Patient Enrollment Form', - appContext: - 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPatientEnrollment', - type: 'smart', - url: new URL(config.smart.endpoint) + links: [ + { + label: 'Prescriber Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Prescriber_Guide.pdf' + ) + }, + { + label: 'Prescriber Comprehension', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Isotretinoin_2021_10_8_Comprehension_Questions.pdf' + ) + }, + { + label: 'Prescriber Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPrescriberEnrollmentForm', + type: 'smart', + url: new URL(config.smart.endpoint) + } + ], + summary: "Prescriber Forms" } ], '1237051': [ { - label: 'Documentation Requirements', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_REMS_Document.pdf' - ) - }, - { - label: 'Patient Counseling Guide', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Patient_Counseling_Guide.pdf' - ) - }, - { - label: 'Patient FAQ', - type: 'absolute', - url: new URL( - 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-patientfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A21Z&ske=2022-09-26T19%3A11%3A21Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A27%3A00Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=owSGAoUBZuCtsLE41F2XC3o12x%2BG%2Bt5ogykOIt796es%3D' - ) + links: [ + { + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_REMS_Document.pdf' + ) + }, + { + label: 'Patient Counseling Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Patient_Counseling_Guide.pdf' + ) + }, + { + label: 'Patient FAQ', + type: 'absolute', + url: new URL( + 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-patientfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A21Z&ske=2022-09-26T19%3A11%3A21Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A27%3A00Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=owSGAoUBZuCtsLE41F2XC3o12x%2BG%2Bt5ogykOIt796es%3D' + ) + }, + { + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) + } + ], }, { - label: 'Patient Enrollment Form', - appContext: - 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFRemsPatientEnrollment', - type: 'smart', - url: new URL(config.smart.endpoint) + links: [ + { + label: 'Prescriber Education', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/TIRF_2022_08_17_Prescriber_Education.pdf' + ) + }, + { + label: 'Prescriber FAQ', + type: 'absolute', + url: new URL( + 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-prfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A53Z&ske=2022-09-26T19%3A11%3A53Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A35%3A43Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=fqtDzsm7qi1G8MKau210Y3gNet%2Fi20zw2EThKODdEUM%3D' + ) + }, + { + label: 'Prescriber Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFPrescriberEnrollmentForm', + type: 'smart', + url: new URL(config.smart.endpoint) + }, + { + label: 'Prescriber Knowledge Assessment', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFPrescriberKnowledgeAssessment', + type: 'smart', + url: new URL(config.smart.endpoint) + } + ], + summary: 'Prescriber Forms' } ] }; @@ -172,64 +287,71 @@ const handler = (req: TypedRequestBody, res: any) => { console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); console.log(' Patient: ' + patient?.id); - // verify a MedicationRequest was sent - if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { - res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); - return; - } + console.log(' MedicationRequest: ' + prefetchRequest?.id); + console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); + console.log(' Patient: ' + patient?.id); - // verify ids - if ( - patient?.id && - patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') - ) { - res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); - return; - } - if ( - practitioner?.id && - practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') - ) { - res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); - return; - } - if ( - prefetchRequest?.id && - contextRequest && - contextRequest.id && - prefetchRequest.id.replace('MedicationRequest/', '') !== - contextRequest.id.replace('MedicationRequest/', '') - ) { - res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); - return; - } + // verify a MedicationRequest was sent + if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { + res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); + return; + } - const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; - if (medicationCode && medicationCode.code) { - const returnCard = validCodes.some(e => { - return e.code === medicationCode.code && e.system === medicationCode.system; + // verify ids + if ( + patient?.id && + patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') + ) { + res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); + return; + } + if ( + practitioner?.id && + practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') + ) { + res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); + return; + } + if ( + prefetchRequest?.id && + contextRequest && + contextRequest.id && + prefetchRequest.id.replace('MedicationRequest/', '') !== + contextRequest.id.replace('MedicationRequest/', '') + ) { + res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); + return; + } + + const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; + if (medicationCode && medicationCode.code) { + const returnCard = validCodes.some(e => { + return e.code === medicationCode.code && e.system === medicationCode.system; + }); + if (returnCard) { + const cardArray: Card[] = [] + const codeRule = codeMap[medicationCode.code]; + for(const rule of codeRule){ + const card = new Card(rule.summary || medicationCode.display || 'Rems', CARD_DETAILS, source, 'info'); + rule.links.forEach(e => { + if (e.type == 'absolute') { + // no construction needed + card.addLink(e); + } else { + // link is SMART + // TODO: smart links should be built with discovered questionnaires, not hard coded ones + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${contextRequest.insurance?.[0].reference + }`; + card.addLink(e); + } + }); + cardArray.push(card) + } + res.json({ + cards: cardArray }); - if (returnCard) { - const card = new Card(medicationCode.display || 'Rems', CARD_DETAILS, source, 'info'); - const links = codeMap[medicationCode.code]; - links.forEach(e => { - if (e.type == 'absolute') { - // no construction needed - card.addLink(e); - } else { - // link is SMART - // TODO: smart links should be built with discovered questionnaires, not hard coded ones - e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ - contextRequest.insurance?.[0].reference - }`; - card.addLink(e); - } - }); - res.json({ - cards: [card] - }); - } else { - res.json(buildErrorCard('Unsupported code')); + } else { + res.json(buildErrorCard('Unsupported code')); } } else { res.json(buildErrorCard('MedicationRequest does not contain a code')); From c00bd7abf081d752a7ddcdbe4062947bc8961732 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Thu, 26 Jan 2023 11:18:37 -0500 Subject: [PATCH 52/83] linting --- src/hooks/rems.hook.ts | 144 +++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 69 deletions(-) diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index ae250187..5cf2c2a0 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -8,55 +8,55 @@ import config from '../config'; import { hydrate } from './Prefetch/hydrator/PrefetchHydrator'; interface CardRule { - links: Link[] - summary?: string + links: Link[]; + summary?: string; } const CARD_DETAILS = 'Documentation Required, please complete form via Smart App link.'; // TODO: this codemap should be replaced with a system similar to original CRD's questionnaire package operation // the app doesn't necessarily have to use CQL for this. const codeMap: { [key: string]: CardRule[] } = { - '2183126': [{ - links: [ - { - label: 'Documentation Requirements', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf' - ) - }, - { - label: 'Medication Guide', - type: 'absolute', - url: new URL( - 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true' - ) - }, - { - label: 'Patient Guide', - type: 'absolute', - url: new URL( - 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf' - ) - }, - { - label: 'Patient Status Update Form', - appContext: - 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus', - type: 'smart', - url: new URL(config.smart.endpoint) - }, - { - label: 'Patient Enrollment Form', - appContext: - 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment', - type: 'smart', - url: new URL(config.smart.endpoint) - } - ], - }, - { - links: - [ + '2183126': [ + { + links: [ + { + label: 'Documentation Requirements', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_08_04_REMS_Full.pdf' + ) + }, + { + label: 'Medication Guide', + type: 'absolute', + url: new URL( + 'https://daiichisankyo.us/prescribing-information-portlet/getPIContent?productName=Turalio_Med&inline=true' + ) + }, + { + label: 'Patient Guide', + type: 'absolute', + url: new URL( + 'https://www.accessdata.fda.gov/drugsatfda_docs/rems/Turalio_2020_12_16_Patient_Guide.pdf' + ) + }, + { + label: 'Patient Status Update Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus', + type: 'smart', + url: new URL(config.smart.endpoint) + }, + { + label: 'Patient Enrollment Form', + appContext: + 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment', + type: 'smart', + url: new URL(config.smart.endpoint) + } + ] + }, + { + links: [ { label: 'Documentation Requirements', type: 'absolute', @@ -91,10 +91,10 @@ const codeMap: { [key: string]: CardRule[] } = { 'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberKnowledgeAssessment', type: 'smart', url: new URL(config.smart.endpoint) - }, + } ], - summary: "Prescriber Forms" - } + summary: 'Prescriber Forms' + } ], '6064': [ { @@ -134,7 +134,7 @@ const codeMap: { [key: string]: CardRule[] } = { type: 'smart', url: new URL(config.smart.endpoint) } - ], + ] }, { links: [ @@ -160,7 +160,7 @@ const codeMap: { [key: string]: CardRule[] } = { url: new URL(config.smart.endpoint) } ], - summary: "Prescriber Forms" + summary: 'Prescriber Forms' } ], '1237051': [ @@ -194,7 +194,7 @@ const codeMap: { [key: string]: CardRule[] } = { type: 'smart', url: new URL(config.smart.endpoint) } - ], + ] }, { links: [ @@ -210,7 +210,7 @@ const codeMap: { [key: string]: CardRule[] } = { type: 'absolute', url: new URL( 'https://tirfstorageproduction.blob.core.windows.net/tirf-public/tirf-prfaq-frequently-asked-questions.pdf?skoid=417a7522-f809-43c4-b6a8-6b192d44b69e&sktid=59fc620e-de8c-4745-abcc-18182d1bf20e&skt=2022-09-20T19%3A06%3A53Z&ske=2022-09-26T19%3A11%3A53Z&sks=b&skv=2020-04-08&sv=2020-04-08&st=2021-03-21T21%3A35%3A43Z&se=2031-03-21T23%3A59%3A59Z&sr=b&sp=rc&sig=fqtDzsm7qi1G8MKau210Y3gNet%2Fi20zw2EThKODdEUM%3D' - ) + ) }, { label: 'Prescriber Enrollment Form', @@ -317,7 +317,7 @@ const handler = (req: TypedRequestBody, res: any) => { contextRequest && contextRequest.id && prefetchRequest.id.replace('MedicationRequest/', '') !== - contextRequest.id.replace('MedicationRequest/', '') + contextRequest.id.replace('MedicationRequest/', '') ) { res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); return; @@ -329,24 +329,30 @@ const handler = (req: TypedRequestBody, res: any) => { return e.code === medicationCode.code && e.system === medicationCode.system; }); if (returnCard) { - const cardArray: Card[] = [] + const cardArray: Card[] = []; const codeRule = codeMap[medicationCode.code]; - for(const rule of codeRule){ - const card = new Card(rule.summary || medicationCode.display || 'Rems', CARD_DETAILS, source, 'info'); - rule.links.forEach(e => { - if (e.type == 'absolute') { - // no construction needed - card.addLink(e); - } else { - // link is SMART - // TODO: smart links should be built with discovered questionnaires, not hard coded ones - e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${contextRequest.insurance?.[0].reference - }`; - card.addLink(e); - } - }); - cardArray.push(card) - } + for (const rule of codeRule) { + const card = new Card( + rule.summary || medicationCode.display || 'Rems', + CARD_DETAILS, + source, + 'info' + ); + rule.links.forEach(e => { + if (e.type == 'absolute') { + // no construction needed + card.addLink(e); + } else { + // link is SMART + // TODO: smart links should be built with discovered questionnaires, not hard coded ones + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ + contextRequest.insurance?.[0].reference + }`; + card.addLink(e); + } + }); + cardArray.push(card); + } res.json({ cards: cardArray }); From 565173380cb3245892dc4eba174bda0bf9fd4a3b Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Thu, 26 Jan 2023 12:18:05 -0500 Subject: [PATCH 53/83] indentation --- src/hooks/rems.hook.ts | 134 ++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/src/hooks/rems.hook.ts b/src/hooks/rems.hook.ts index 5cf2c2a0..4b3261b1 100644 --- a/src/hooks/rems.hook.ts +++ b/src/hooks/rems.hook.ts @@ -287,77 +287,77 @@ const handler = (req: TypedRequestBody, res: any) => { console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); console.log(' Patient: ' + patient?.id); - console.log(' MedicationRequest: ' + prefetchRequest?.id); - console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); - console.log(' Patient: ' + patient?.id); + console.log(' MedicationRequest: ' + prefetchRequest?.id); + console.log(' Practitioner: ' + practitioner?.id + ' NPI: ' + npi); + console.log(' Patient: ' + patient?.id); - // verify a MedicationRequest was sent - if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { - res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); - return; - } + // verify a MedicationRequest was sent + if (contextRequest && contextRequest.resourceType !== 'MedicationRequest') { + res.json(buildErrorCard('DraftOrders does not contain a MedicationRequest')); + return; + } - // verify ids - if ( - patient?.id && - patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') - ) { - res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); - return; - } - if ( - practitioner?.id && - practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') - ) { - res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); - return; - } - if ( - prefetchRequest?.id && - contextRequest && - contextRequest.id && - prefetchRequest.id.replace('MedicationRequest/', '') !== - contextRequest.id.replace('MedicationRequest/', '') - ) { - res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); - return; - } + // verify ids + if ( + patient?.id && + patient.id.replace('Patient/', '') !== context.patientId.replace('Patient/', '') + ) { + res.json(buildErrorCard('Context patientId does not match prefetch Patient ID')); + return; + } + if ( + practitioner?.id && + practitioner.id.replace('Practitioner/', '') !== context.userId.replace('Practitioner/', '') + ) { + res.json(buildErrorCard('Context userId does not match prefetch Practitioner ID')); + return; + } + if ( + prefetchRequest?.id && + contextRequest && + contextRequest.id && + prefetchRequest.id.replace('MedicationRequest/', '') !== + contextRequest.id.replace('MedicationRequest/', '') + ) { + res.json(buildErrorCard('Context draftOrder does not match prefetch MedicationRequest ID')); + return; + } - const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; - if (medicationCode && medicationCode.code) { - const returnCard = validCodes.some(e => { - return e.code === medicationCode.code && e.system === medicationCode.system; - }); - if (returnCard) { - const cardArray: Card[] = []; - const codeRule = codeMap[medicationCode.code]; - for (const rule of codeRule) { - const card = new Card( - rule.summary || medicationCode.display || 'Rems', - CARD_DETAILS, - source, - 'info' - ); - rule.links.forEach(e => { - if (e.type == 'absolute') { - // no construction needed - card.addLink(e); - } else { - // link is SMART - // TODO: smart links should be built with discovered questionnaires, not hard coded ones - e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ - contextRequest.insurance?.[0].reference - }`; - card.addLink(e); - } - }); - cardArray.push(card); - } - res.json({ - cards: cardArray + const medicationCode = contextRequest?.medicationCodeableConcept?.coding?.[0]; + if (medicationCode && medicationCode.code) { + const returnCard = validCodes.some(e => { + return e.code === medicationCode.code && e.system === medicationCode.system; }); - } else { - res.json(buildErrorCard('Unsupported code')); + if (returnCard) { + const cardArray: Card[] = []; + const codeRule = codeMap[medicationCode.code]; + for (const rule of codeRule) { + const card = new Card( + rule.summary || medicationCode.display || 'Rems', + CARD_DETAILS, + source, + 'info' + ); + rule.links.forEach(e => { + if (e.type == 'absolute') { + // no construction needed + card.addLink(e); + } else { + // link is SMART + // TODO: smart links should be built with discovered questionnaires, not hard coded ones + e.appContext = `${e.appContext}&order=${JSON.stringify(contextRequest)}&coverage=${ + contextRequest.insurance?.[0].reference + }`; + card.addLink(e); + } + }); + cardArray.push(card); + } + res.json({ + cards: cardArray + }); + } else { + res.json(buildErrorCard('Unsupported code')); } } else { res.json(buildErrorCard('MedicationRequest does not contain a code')); From d17addd6f92ef7ab2afdd9941547deb7951874d6 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Thu, 26 Jan 2023 17:51:44 -0500 Subject: [PATCH 54/83] readd monogo db. --- docker-compose-dev.yml | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 475948e6..72b72528 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -144,32 +144,27 @@ services: - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules # - rems_dev_pims-backend-nodeModules:/home/node/app/pims/backend/node_modules - rems_dev_pims-logs:/home/node/app/pims/logs - # pharmacy-information-system-database: # Name of our service - # image: mongo - # container_name: rems_dev_pharmacy-information-system-database - # environment: - # MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - # MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password - # expose: - # - "27017" - # ports: # Port binding to host from docker container - # - "27017:27017" - # volumes: - # - rems_dev_pharmacy-infomation-system-database:/data/db + pims-remsadmin-mongo: # Name of our service + image: mongo:6.0 + container_name: pims-remsadmin-mongo + environment: + MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root + MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password + ports: + - "27018:27017" + volumes: + - pims-remsadmin-mongo:/data/db + # - ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh volumes: rems_dev_test-ehr-sync: - external: true # rems_dev_crd-sync: # external: true rems_dev_crd-request-generator-sync: - external: true rems_dev_dtr-sync: - external: true rems_dev_rems-sync: - external: true rems_dev_pims-sync: - external: true + #external: true rems_dev_keycloak-data: rems_dev_test-ehr-gradle: @@ -195,3 +190,4 @@ volumes: rems_dev_pims-nodeModules: # rems_dev_pims-backend-nodeModules: rems_dev_pims-logs: # rems_dev_pims-database: + pims-remsadmin-mongo: From fb8cfd69ecedb51f2015836ec7831254db1988dc Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Thu, 26 Jan 2023 18:54:57 -0500 Subject: [PATCH 55/83] Add mongo express. --- docker-compose-dev.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 72b72528..1e71acf5 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -155,6 +155,16 @@ services: volumes: - pims-remsadmin-mongo:/data/db # - ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh + mongo-express: + image: mongo-express + depends_on: + - pims-remsadmin-mongo + ports: + - "8088:8081" + environment: + ME_CONFIG_MONGODB_ADMINUSERNAME: pharmacy-information-root + ME_CONFIG_MONGODB_ADMINPASSWORD: pharmacy-information-password + ME_CONFIG_MONGODB_SERVER: pims-remsadmin-mongo volumes: rems_dev_test-ehr-sync: From a65cea253728ba819ecdfee83b8d493d61deeef4 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Thu, 26 Jan 2023 19:52:50 -0500 Subject: [PATCH 56/83] mongo init script. --- docker-compose-dev.yml | 6 ++++-- mongo-init.js | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 mongo-init.js diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 1e71acf5..f3cb1729 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -144,7 +144,8 @@ services: - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules # - rems_dev_pims-backend-nodeModules:/home/node/app/pims/backend/node_modules - rems_dev_pims-logs:/home/node/app/pims/logs - pims-remsadmin-mongo: # Name of our service + + pims-remsadmin-mongo: image: mongo:6.0 container_name: pims-remsadmin-mongo environment: @@ -154,7 +155,8 @@ services: - "27018:27017" volumes: - pims-remsadmin-mongo:/data/db - # - ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh + - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js + mongo-express: image: mongo-express depends_on: diff --git a/mongo-init.js b/mongo-init.js new file mode 100644 index 00000000..4baf98a6 --- /dev/null +++ b/mongo-init.js @@ -0,0 +1,11 @@ +// Create Databases +const dbPims = db.getSiblingDB('pims'); +const dbRemsAdmin = db.getSiblingDB('remsadmin'); + +// Create Collections +dbPims.createCollection('pimscollection'); +dbRemsAdmin.createCollection('remsadmincollection'); + +// Insert document to ensure db/collection is created +dbPims.pimscollection.insertOne({name: 'Hello World!'}) +dbRemsAdmin.remsadmincollection.insertOne({name: 'Hello World Again!'}) \ No newline at end of file From e739e1d0f607a0eda73111b24531798f8b4f5e46 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Fri, 27 Jan 2023 19:28:42 -0500 Subject: [PATCH 57/83] cleanup docker-compose-dev --- docker-compose-dev.yml | 73 +++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 40 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index f3cb1729..f986f83c 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -16,13 +16,10 @@ services: context: ../test-ehr dockerfile: Dockerfile.keycloak - # Create test ehr container test-ehr: - # Name of our service container_name: rems_dev_test-ehr ports: - # Port binding to host from docker container - - '8080:8080' # Bind port 3000 of host to 3000 of container + - '8080:8080' - "8081:8081" environment: - DOCKER_PROFILE=true @@ -39,6 +36,17 @@ services: extra_hosts: - "host.docker.internal:host-gateway" + pims_remsadmin_mongo: + image: mongo:6.0 + container_name: pims_remsadmin_mongo + ports: + - '27018:27017' + environment: + MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root + MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password + volumes: + - pims_remsadmin_mongo:/data/db + - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js # Create crd container # crd: # # Name of our service @@ -63,9 +71,7 @@ services: # - rems_dev_crd-operations-build:/CRD/operations/build # - rems_dev_crd-resources-build:/CRD/resources/build - # Create crd request generator container crd-request-generator: - # Name of our service build: context: ../crd-request-generator dockerfile: Dockerfile.dev @@ -73,8 +79,7 @@ services: environment: - REACT_APP_REMS_CONFIG=true ports: - # Port binding to host from docker container - - "3000:3000" # Bind port 3000 of host to 3000 of container + - "3000:3000" - "3001:3001" volumes: - rems_dev_crd-request-generator-sync:/home/node/app/crd-request-generator:nocopy # nocopy is important @@ -83,16 +88,13 @@ services: - rems_dev_crd-request-generator-build:/home/node/app/crd-request-generator/build - rems_dev_crd-request-generator-logs:/home/node/app/crd-request-generator/logs - # Create dtr container dtr: - # Name of our service build: context: ../dtr dockerfile: Dockerfile.dev container_name: rems_dev_dtr ports: - # Port binding to host from docker container - - "3005:3005" # Bind port 3000 of host to 3000 of container + - "3005:3005" - "3006:3006" volumes: - rems_dev_dtr-sync:/home/node/app/dtr:nocopy # nocopy is important @@ -100,16 +102,13 @@ services: - rems_dev_dtr-databaseData:/home/node/app/dtr/databaseData - rems_dev_dtr-logs:/home/node/app/dtr/logs - # Create rems container rems-administrator: - # Name of our service build: context: '.' dockerfile: Dockerfile.dev container_name: rems_dev_rems ports: - # Port binding to host from docker container - - "9020:8090" # Bind port 3000 of host to 3000 of container + - "9020:8090" volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important @@ -145,40 +144,35 @@ services: # - rems_dev_pims-backend-nodeModules:/home/node/app/pims/backend/node_modules - rems_dev_pims-logs:/home/node/app/pims/logs - pims-remsadmin-mongo: - image: mongo:6.0 - container_name: pims-remsadmin-mongo - environment: - MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password - ports: - - "27018:27017" - volumes: - - pims-remsadmin-mongo:/data/db - - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js - - mongo-express: - image: mongo-express - depends_on: - - pims-remsadmin-mongo - ports: - - "8088:8081" - environment: - ME_CONFIG_MONGODB_ADMINUSERNAME: pharmacy-information-root - ME_CONFIG_MONGODB_ADMINPASSWORD: pharmacy-information-password - ME_CONFIG_MONGODB_SERVER: pims-remsadmin-mongo + # pharmacy-information-system-database: # Name of our service + # image: mongo + # container_name: rems_dev_pharmacy-information-system-database + # environment: + # MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root + # MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password + # expose: + # - "27017" + # ports: # Port binding to host from docker container + # - "27017:27017" + # volumes: + # - rems_dev_pharmacy-infomation-system-database:/data/db volumes: rems_dev_test-ehr-sync: + external: true # rems_dev_crd-sync: # external: true rems_dev_crd-request-generator-sync: + external: true rems_dev_dtr-sync: + external: true rems_dev_rems-sync: + external: true rems_dev_pims-sync: - #external: true + external: true rems_dev_keycloak-data: + pims_remsadmin_mongo: rems_dev_test-ehr-gradle: rems_dev_test-ehr-bin: rems_dev_test-ehr-build: @@ -202,4 +196,3 @@ volumes: rems_dev_pims-nodeModules: # rems_dev_pims-backend-nodeModules: rems_dev_pims-logs: # rems_dev_pims-database: - pims-remsadmin-mongo: From e0211cc91ebcaf183d8c3f5cda69b28b69ef9815 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Fri, 27 Jan 2023 19:38:44 -0500 Subject: [PATCH 58/83] ignore mongo-init from linter. --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index e69de29b..92920aa7 100644 --- a/.eslintignore +++ b/.eslintignore @@ -0,0 +1 @@ +mongo-init.js \ No newline at end of file From 0270e986fbcce7f615561655be4a7a9cd95ee695 Mon Sep 17 00:00:00 2001 From: Kenny Ung Date: Fri, 27 Jan 2023 19:56:46 -0500 Subject: [PATCH 59/83] add prettier ignore file to ignore mongo-init --- .prettierignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..98623b4c --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +mongo-init.js From 74013673884f7152155ed07d402c5d9904ccd884 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Mon, 6 Feb 2023 12:04:02 -0500 Subject: [PATCH 60/83] docker configs --- Dockerfile.dev | 3 ++- docker-compose-dev.yml | 14 +++++++++----- docker-sync.yml | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index ce072618..a8f56aee 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,5 +1,6 @@ FROM node:18-alpine WORKDIR /REMS -COPY . . +COPY --chown=node:node . . RUN npm install +EXPOSE 8090 CMD ./dockerRunnerDev.sh \ No newline at end of file diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index f986f83c..75265ee5 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -40,7 +40,7 @@ services: image: mongo:6.0 container_name: pims_remsadmin_mongo ports: - - '27018:27017' + - '27017:27017' environment: MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password @@ -108,9 +108,11 @@ services: dockerfile: Dockerfile.dev container_name: rems_dev_rems ports: - - "9020:8090" + - "8090:8090" volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important + - rems_dev_rems-nodeModules:/REMS/node_modules + - rems_dev_rems-logs:/REMS/logs # pharmacy-information-system: # Name of our service # build: @@ -137,11 +139,11 @@ services: dockerfile: Dockerfile.dev container_name: rems_dev_pims ports: - - "4200:3000" #4200 was the frontend port for the old pims + - "5050:5050" + - "5051:5051" volumes: - rems_dev_pims-sync:/home/node/app/pims:nocopy - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules - # - rems_dev_pims-backend-nodeModules:/home/node/app/pims/backend/node_modules - rems_dev_pims-logs:/home/node/app/pims/logs # pharmacy-information-system-database: # Name of our service @@ -193,6 +195,8 @@ volumes: rems_dev_dtr-nodeModules: rems_dev_dtr-databaseData: rems_dev_dtr-logs: + rems_dev_pims-logs: # rems_dev_pims-database: rems_dev_pims-nodeModules: # rems_dev_pims-backend-nodeModules: + rems_dev_rems-nodeModules: + rems_dev_rems-logs: - rems_dev_pims-logs: # rems_dev_pims-database: diff --git a/docker-sync.yml b/docker-sync.yml index 0e24cbfa..acc3d17a 100644 --- a/docker-sync.yml +++ b/docker-sync.yml @@ -20,6 +20,7 @@ syncs: rems_dev_rems-sync: src: '.' + sync_excludes: ['node_modules', 'logs'] rems_dev_pharmacy-information-system-sync: src: '../pharmacy-information-system' @@ -27,4 +28,4 @@ syncs: rems_dev_pims-sync: src: '../pims' - sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] \ No newline at end of file + sync_excludes: ['node_modules', 'logs'] \ No newline at end of file From 5f118fb13fc1d4404d3f92d37fadc9e7ca62bc05 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Mon, 6 Feb 2023 12:08:47 -0500 Subject: [PATCH 61/83] remove hello world collection documents --- mongo-init.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mongo-init.js b/mongo-init.js index 4baf98a6..250634c2 100644 --- a/mongo-init.js +++ b/mongo-init.js @@ -2,10 +2,10 @@ const dbPims = db.getSiblingDB('pims'); const dbRemsAdmin = db.getSiblingDB('remsadmin'); -// Create Collections -dbPims.createCollection('pimscollection'); -dbRemsAdmin.createCollection('remsadmincollection'); +// // Create Collections +// dbPims.createCollection('pimscollection'); +// dbRemsAdmin.createCollection('remsadmincollection'); -// Insert document to ensure db/collection is created -dbPims.pimscollection.insertOne({name: 'Hello World!'}) -dbRemsAdmin.remsadmincollection.insertOne({name: 'Hello World Again!'}) \ No newline at end of file +// // Insert document to ensure db/collection is created +// dbPims.pimscollection.insertOne({name: 'Hello World!'}) +// dbRemsAdmin.remsadmincollection.insertOne({name: 'Hello World Again!'}) \ No newline at end of file From 7c3bb120178d95a716cf942d096736879387d35c Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Mon, 6 Feb 2023 13:00:21 -0500 Subject: [PATCH 62/83] mongo changes --- README.md | 18 +++++++++++++++++- docker-compose-dev.yml | 8 +++++--- mongo-init.js | 6 +++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0622b13a..17ef1973 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,25 @@ You can find complete end-to-end full-stack set up guides for DRLS REMS at the f ``` 2. Run dockerRunner.sh script ```bash - ./dockerRunner.sh + npm run start ``` +## Running the Mongo DB instance +1. On the first run use the following command to create a docker mongo instance: + ```bash + docker run --name rems_local_pims_remsadmin_mongo --expose 27017 -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME='rems-admin-pims-root' -e MONGO_INITDB_ROOT_PASSWORD='rems-admin-pims-password' -v rems_local_pims_remsadmin_mongo:/data/db -v "$(pwd)"/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js mongo + ``` + To stop the running container, simply use ctrl + c + + +2. On subsequent runs use the following command to start the existing mongo container: + ```bash + docker start rems_local_pims_remsadmin_mongo + ``` + To stop the running container, simply run the below command + ```bash + docker stop rems_local_pims_remsadmin_mongo + ``` # REMS Administrator NOTE: The REMS Administrator is a work in progress. diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 75265ee5..3c625f24 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -37,16 +37,18 @@ services: - "host.docker.internal:host-gateway" pims_remsadmin_mongo: - image: mongo:6.0 + image: mongo container_name: pims_remsadmin_mongo ports: - '27017:27017' environment: - MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password + MONGO_INITDB_ROOT_USERNAME: rems-admin-pims-root + MONGO_INITDB_ROOT_PASSWORD: rems-admin-pims-password volumes: - pims_remsadmin_mongo:/data/db - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js + + # Create crd container # crd: # # Name of our service diff --git a/mongo-init.js b/mongo-init.js index 250634c2..657e799d 100644 --- a/mongo-init.js +++ b/mongo-init.js @@ -2,9 +2,9 @@ const dbPims = db.getSiblingDB('pims'); const dbRemsAdmin = db.getSiblingDB('remsadmin'); -// // Create Collections -// dbPims.createCollection('pimscollection'); -// dbRemsAdmin.createCollection('remsadmincollection'); +// Create Collections +dbPims.createCollection('pims-tmp'); +dbRemsAdmin.createCollection('remsadmin-tmp'); // // Insert document to ensure db/collection is created // dbPims.pimscollection.insertOne({name: 'Hello World!'}) From ee10ff198c98abee5a88f70cb1b05804d5d60722 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Mon, 6 Feb 2023 13:24:29 -0500 Subject: [PATCH 63/83] switch to mongo --- src/config.ts | 2 +- src/fhir/utilities.ts | 12 ++++++------ src/main.ts | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/config.ts b/src/config.ts index e7a72845..55f1f20a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -26,7 +26,7 @@ export default { VsacApiKey: env.VSAC_KEY }, database: { - selected: 'tingo', + selected: 'mongo', tingoConfig: { location: 'tingo_db', options: '' diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index a7fb29e1..8b132474 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -105,7 +105,7 @@ export class FhirUtilities { Object.assign(doc, { _id: id }); // Insert our resource record - collection.insert(doc, (err: any) => { + await collection.insertOne(doc, async (err: any) => { if (err) { console.log(' Error with %s.create: ', resource.resourceType, err.message); reject(err); @@ -118,7 +118,7 @@ export class FhirUtilities { const history_collection = db.collection(historyCollectionString); // Insert our patient record to history but don't assign _id - history_collection.insert(history_doc, (err2: any) => { + await history_collection.insertOne(history_doc, (err2: any) => { if (err2) { console.log(' Error with %sHistory.create: ', resource.resourceType, err2.message); reject(err2); @@ -129,20 +129,20 @@ export class FhirUtilities { }); } - static loadFile(filePath: string, file: any) { + static async loadFile(filePath: string, file: any) { const extension = re.exec(filePath); if (extension) { if (extension[1].toLowerCase() === 'json') { if (file !== 'TopicMetadata.json') { console.log("'%s' is a JSON Resource file.", filePath); - fs.readFile(filePath, 'utf8', (err: any, jsonString: string) => { + fs.readFile(filePath, 'utf8', async (err: any, jsonString: string) => { if (err) { console.error('Failed to read file:', err); return; } try { const resource = JSON.parse(jsonString); - FhirUtilities.store( + await FhirUtilities.store( resource, function () { return; @@ -160,7 +160,7 @@ export class FhirUtilities { } } - static loadResources(resourcePath: string) { + static async loadResources(resourcePath: string) { console.log('Loading FHIR Resources from: ' + resourcePath); // Loop through all the files in the directory looking for folders diff --git a/src/main.ts b/src/main.ts index f47263db..6d8ac4f4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,6 +34,7 @@ export default async function main() { } try { await dbClient.connect(); + console.log("Connected to Database") } catch (dbErr: any) { console.error(dbErr.message); process.exit(1); From bec7a52e39b7068bbad2fe65b55c3f1ac41547aa Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Mon, 6 Feb 2023 14:57:18 -0500 Subject: [PATCH 64/83] compose container names consistency --- docker-compose-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 3c625f24..53b410ed 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -38,7 +38,7 @@ services: pims_remsadmin_mongo: image: mongo - container_name: pims_remsadmin_mongo + container_name: rems_dev_pims-remsadmin-mongo ports: - '27017:27017' environment: @@ -108,7 +108,7 @@ services: build: context: '.' dockerfile: Dockerfile.dev - container_name: rems_dev_rems + container_name: rems_dev_rems-administrator ports: - "8090:8090" volumes: From d12aa8370947c6ea0f5d03bd0adf52490f9a35bd Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Tue, 7 Feb 2023 10:28:34 -0500 Subject: [PATCH 65/83] update env --- env.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/env.json b/env.json index d08a95ef..c6c4f58b 100644 --- a/env.json +++ b/env.json @@ -8,7 +8,7 @@ "type": "string", "test": "fhir-test", "development": "fhir-development", - "default": "fhir", + "default": "remsadmin", "required": true }, "WHITELIST": { From c8f257b0ab1d80a9b1666b8bdd78c0dfef528ee9 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Tue, 7 Feb 2023 10:56:03 -0500 Subject: [PATCH 66/83] linting --- src/fhir/utilities.ts | 2 +- src/main.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 8b132474..a4c60d61 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -105,7 +105,7 @@ export class FhirUtilities { Object.assign(doc, { _id: id }); // Insert our resource record - await collection.insertOne(doc, async (err: any) => { + await collection.insertOne(doc, async (err: any) => { if (err) { console.log(' Error with %s.create: ', resource.resourceType, err.message); reject(err); diff --git a/src/main.ts b/src/main.ts index 6d8ac4f4..ff0931bd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,7 +34,7 @@ export default async function main() { } try { await dbClient.connect(); - console.log("Connected to Database") + console.log('Connected to Database'); } catch (dbErr: any) { console.error(dbErr.message); process.exit(1); From dc0c53b78354410e25ca48ba765f0fe663d6e4fd Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Tue, 7 Feb 2023 12:47:49 -0500 Subject: [PATCH 67/83] update test with mongo --- jest-mongodb-config.ts | 11 ++++++++++ package.json | 3 ++- src/lib/__tests__/vsac_cache.test.ts | 32 +++++++++++++++++----------- 3 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 jest-mongodb-config.ts diff --git a/jest-mongodb-config.ts b/jest-mongodb-config.ts new file mode 100644 index 00000000..46c3f8d0 --- /dev/null +++ b/jest-mongodb-config.ts @@ -0,0 +1,11 @@ +module.exports = { + mongodbMemoryServerOptions: { + binary: { + version: '4.0.3', + skipMD5: true + }, + autoStart: false, + instance: {}, + useSharedDBForAllJestWorkers: false + } +}; diff --git a/package.json b/package.json index da9cdaf6..3003d196 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "moduleNameMapper": { "axios": "axios/dist/node/axios.cjs" }, - "preset": "ts-jest", + "preset": "@shelf/jest-mongodb", "testEnvironment": "node", "transform": { "^.+\\.ts?$": "ts-jest" @@ -72,6 +72,7 @@ "winston-daily-rotate-file": "^4.2.1" }, "devDependencies": { + "@shelf/jest-mongodb": "^4.1.6", "@types/cors": "^2.8.12", "@types/express": "^4.17.14", "@types/jest": "^27.5.2", diff --git a/src/lib/__tests__/vsac_cache.test.ts b/src/lib/__tests__/vsac_cache.test.ts index cca862c6..ca1ca2ef 100644 --- a/src/lib/__tests__/vsac_cache.test.ts +++ b/src/lib/__tests__/vsac_cache.test.ts @@ -4,26 +4,32 @@ import questionnaire from './fixtures/questionnaire.json'; import valueSet from './fixtures/valueSet.json'; import fs from 'fs'; import nock from 'nock'; -import { TingoDatabase } from '../TingoDatabase'; import { Globals } from '../../globals'; - +import { Db, MongoClient } from 'mongodb'; +import constants from '../../constants'; describe('VsacCache', () => { const client = new VsacCache('./tmp', '2c1d55c3-3484-4902-b645-25f3a4974ce6'); - const dbClient = new TingoDatabase({ - location: './tingo_db', - options: '' + + let connection: MongoClient; + let db: Db; + + beforeAll(async () => { + if (process.env.MONGO_URL) { + connection = await MongoClient.connect(process.env.MONGO_URL, {}); + db = await connection.db(process.env.MONGO_DB_NAME); + Globals.database = db; + } }); - dbClient.connect(); - Globals.databaseClient = dbClient.client; - Globals.database = dbClient.database; + afterAll(async () => { + await connection.close(); + }); beforeEach(() => { - Globals.database.close(); - fs.rmSync('./tingo_db', { recursive: true, force: true }); - dbClient.connect(); - Globals.databaseClient = dbClient.client; - Globals.database = dbClient.database; // client.clearCache(); + const baseVersion = '4_0_0'; + const collectionString = `${constants.COLLECTION.VALUESET}_${baseVersion}`; + + db.collection(collectionString).deleteMany({}); client.onlyVsac = false; jest.resetModules(); }); From 6a5b76a9b3fe0c96bd639020f06f40a00aef3937 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Tue, 7 Feb 2023 12:50:49 -0500 Subject: [PATCH 68/83] add env.json to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 23372bd2..4b5c5735 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ dist/ .idea/ .DS_Store tingo_db/ +env.json \ No newline at end of file From fcc221de6a8cdd58ded3bbb45a062a95f2c77cd2 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 9 Feb 2023 12:31:27 -0500 Subject: [PATCH 69/83] etasu endpoints --- .vscode/launch.json | 31 +++++ docker-compose-dev.yml | 1 + package.json | 2 +- src/fhir/utilities.ts | 220 ++++++++++++++++++++++++++++++ src/main.ts | 1 + src/server.ts | 301 ++++++++++------------------------------- 6 files changed, 329 insertions(+), 227 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..ed4025a6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,31 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + // does not work currently + // { + // "name": "Debug REMS Backend (Docker)", + // "port": 8091, + // "request": "attach", + // "skipFiles": [ + // "/**" + // ], + // "type": "node", + // "localRoot": "${workspaceFolder}", + // "remoteRoot": "/REMS", + // "restart": true + // }, + { + "name": "Debug REMS Backend (Local)", + "port": 8091, + "request": "attach", + "skipFiles": [ + "/**" + ], + "type": "node", + "restart": true + } + ] +} \ No newline at end of file diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 1030c9d2..53f5f9ef 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -111,6 +111,7 @@ services: container_name: rems_dev_rems-administrator ports: - "8090:8090" + - "8091:8091" volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important - rems_dev_rems-nodeModules:/REMS/node_modules diff --git a/package.json b/package.json index bf4ed363..e4b88113 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "scripts": { "develop": "node dist/scripts/develop.js", - "start": "ts-node-dev src/scripts/serve.ts", + "start": "ts-node-dev --inspect=8091 src/scripts/serve.ts", "test": "jest --maxWorkers=4 --coverage --detectOpenHandles", "lint": "eslint \"**/*.{js,ts}\"", "lint:fix": "eslint \"**/*.{js,ts}\" --quiet --fix", diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index a4c60d61..21806804 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -284,4 +284,224 @@ export class FhirUtilities { }); }); } + + static async populateDB() { + const db = Globals.database; + + + // define schemas + const medicationCollection = await db.collection("medication-requirements" + // , { + // "name": { "type": "string" }, + // "codeSystem": { "type": "string" }, + // "code": { "type": "string" }, + // "requirements": { + // "type": "array", + // "items": { + // "type": "object", + // "properties": { + // "name": { "type": "string" }, + // "description": { "type": "string" }, + // "questionnaire": { "type": "object" }, + // "stakeholderType": { "type": "string" }, + // "createNewCase": { "type": "boolean" }, + // "resourceId": { "type": "string" } + // } + // } + // } + // }, (err: any, collection: any) => { + // if (err) console.log(err); + // } + ); + + + await medicationCollection.createIndex({ name: 1 }, { unique: true }); + + const metRequirementsCollection = await db.collection("met-requirements" + // , { + // "completed": { "type": "boolean" }, + // "completedQuestionnaire": { "type": "object" }, + // "requirementName": { "type": "string" }, + // "requirementDescription": {"type": "string"} + // "drugName": { "type": "string" }, + // "stakeholderId": { "type": "string" }, + // "case_numbers": { "type": "array", "items": { "type": "string" } } + // }, (err: any, collection: any) => { + // if (err) console.log(err); + // } + ); + + + metRequirementsCollection.createIndex({ drugName: 1, requirementName: 1, stakeholderId: 1 }, { unique: true }); + + + const remsCaseCollection = await db.collection("rems-case" + // , { + // "case_number": { "type": "string" }, + // "status": { "type": "string" }, + // "drugName": { "type": "string" }, + // "patientName": { "type": "string" }, + // "metRequirements": { + // "type": "array", + // "items": { + // "type": "object", + // "properties": { + // "metRequirementId": { "type": "number" }, + // "completed": { "type": "boolean" }, + // "stakeholderId": { "type": "string" }, + // "requirementName": { "type": "string" }, + // "requirementDescription": {"type": "string"}, + // } + // } + // } + // }, (err: any, collection: any) => { + // if (err) throw err; + // } + ); + + + // prepopulateDB + medicationCollection.insert([{ + name: "Turalio", + codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", + code: "2183126", + requirements: [{ + name: "Patient Enrollment", + description: "Submit Patient Enrollment form to the REMS Administrator", + stakeholderType: "patient", + createNewCase: true, + resourceId: "TuralioRemsPatientEnrollment", + }, + { + name: "Prescriber Enrollment", + description: "Submit Prescriber Enrollment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TuralioPrescriberEnrollmentForm", + }, + { + name: "Prescriber Knowledge Assessment", + description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TuralioPrescriberKnowledgeAssessment", + }, + { + name: "Pharmacist Enrollment", + description: "Submit Pharmacist Enrollment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + resourceId: "TuralioPharmacistEnrollment", + }, + ] + }, + { + name: "TIRF", + codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", + code: "1237051", + requirements: [{ + name: "Patient Enrollment", + description: "Submit Patient Enrollment form to the REMS Administrator", + stakeholderType: "patient", + createNewCase: true, + resourceId: "TIRFRemsPatientEnrollment", + }, + { + name: "Prescriber Enrollment", + description: "Submit Prescriber Enrollment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TIRFPrescriberEnrollmentForm", + }, + { + name: "Prescriber Knowledge Assessment", + description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "TIRFPrescriberKnowledgeAssessment", + }, + { + name: "Pharmacist Enrollment", + description: "Submit Pharmacist Enrollment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + resourceId: "TIRFPharmacistEnrollmentForm", + }, + { + name: "Pharmacist Knowledge Assessment", + description: "Submit Pharmacist Knowledge Assessment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + resourceId: "TIRFPharmacistKnowledgeAssessment", + }, + ] + }, + { + name: "IPledge", + codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", + code: "6064", + requirements: [{ + name: "Patient Enrollment", + description: "Submit Patient Enrollment form to the REMS Administrator", + stakeholderType: "patient", + createNewCase: true, + resourceId: "IPledgeRemsPatientEnrollment", + }, + { + name: "Prescriber Enrollment", + description: "Submit Prescriber Enrollment form to the REMS Administrator", + stakeholderType: "prescriber", + createNewCase: false, + resourceId: "IPledgeRemsPrescriberEnrollmentForm" + }, + { + name: "Pharmacist Enrollment", + description: "Submit Pharmacist Enrollment form to the REMS Administrator", + stakeholderType: "pharmacist", + createNewCase: false, + resourceId: "IPledgeRemsPharmacistEnrollmentForm" + }, + ] + }, + ], (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Drug Information'); + }); + + metRequirementsCollection.insert([{ + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Enrollment", + drugName: "Turalio", + completedQuestionnaire: null, + case_numbers: [], + }, + { + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Enrollment", + drugName: "TIRF", + completedQuestionnaire: null, + case_numbers: [], + }, + { + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Knowledge Assessment", + drugName: "TIRF", + completedQuestionnaire: null, + case_numbers: [], + }, + { + stakeholderId: "Organization/pharm0111", + completed: true, + requirementName: "Pharmacist Enrollment", + drugName: "IPledge", + completedQuestionnaire: null, + case_numbers: [], + }], (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Pharmacist Met Requirements'); + }); + } } diff --git a/src/main.ts b/src/main.ts index ff0931bd..c2fb6809 100644 --- a/src/main.ts +++ b/src/main.ts @@ -44,6 +44,7 @@ export default async function main() { // load the database with the default resources FhirUtilities.loadResources(config.general.resourcePath); + FhirUtilities.populateDB(); const app = initialize(config); diff --git a/src/server.ts b/src/server.ts index 03a7a901..85e0bd2d 100644 --- a/src/server.ts +++ b/src/server.ts @@ -7,6 +7,7 @@ import remsService from './hooks/rems.hook'; import { Server } from '@projecttacoma/node-fhir-server-core'; import { Globals } from './globals'; import { uid } from 'uid'; +import { FhirUtilities } from './fhir/utilities'; @@ -106,212 +107,13 @@ class REMSServer extends Server { } configureEtasuEndpoints() { - // etasu endpoints - - const db = Globals.database; - // define schemas - const medicationCollection = db.createCollection("medication-requirements", { - "name": { "type": "string" }, - "codeSystem": { "type": "string" }, - "code": { "type": "string" }, - "requirements": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { "type": "string" }, - "description": { "type": "string" }, - "questionnaire": { "type": "object" }, - "stakeholderType": { "type": "string" }, - "createNewCase": { "type": "boolean" }, - "resourceId": { "type": "string" } - } - } - } - }, (err: any, collection: any) => { - if (err) console.log(err); - }); - - medicationCollection.createIndex({ name: 1 }, { unique: true }, (err: any) => { - if (err) console.log(err); - }); - - const metRequirementsCollection = db.createCollection("met-requirements", { - "completed": { "type": "boolean" }, - "completedQuestionnaire": { "type": "object" }, - "requirementName": { "type": "string" }, - "drugName": { "type": "string" }, - "stakeholderId": { "type": "string" }, - "duplicationId": { "type": "number" }, - "case_numbers": { "type": "array", "items": { "type": "string" } } - }, (err: any, collection: any) => { - if (err) console.log(err); - }); - - metRequirementsCollection.createIndex({ duplicationId: 1 }, { unique: true }, (err: any) => { - if (err) console.log(err); - }); - - - const remsCaseCollection = db.createCollection("rems-case", { - "case_number": { "type": "string" }, - "status": { "type": "string" }, - "drugName": { "type": "string" }, - "metRequirements": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metRequirementId": { "type": "number" }, - "completed": { "type": "boolean" }, - "stakeholderId": { "type": "string" }, - "requirementName": { "type": "string" }, - } - } - } - }, (err: any, collection: any) => { - if (err) throw err; - }); - - - // prepopulateDB - medicationCollection.insert([{ - name: "Turalio", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "2183126", - requirements: [{ - name: "Patient Enrollment", - description: "Submit Patient Enrollment form to the REMS Administrator", - stakeholderType: "patient", - createNewCase: true, - resourceId: "TuralioRemsPatientEnrollment", - }, - { - name: "Prescriber Enrollment", - description: "Submit Prescriber Enrollment form to the REMS Administrator", - stakeholderType: "prescriber", - createNewCase: false, - resourceId: "TuralioPrescriberEnrollmentForm", - }, - { - name: "Prescriber Knowledge Assessment", - description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", - stakeholderType: "prescriber", - createNewCase: false, - resourceId: "TuralioPrescriberKnowledgeAssessment", - }, - { - name: "Pharmacist Enrollment", - description: "Submit Pharmacist Enrollment form to the REMS Administrator", - stakeholderType: "pharmacist", - createNewCase: false, - }, - ] - }, - { - name: "TIRF", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "1237051", - requirements: [{ - name: "Patient Enrollment", - description: "Submit Patient Enrollment form to the REMS Administrator", - stakeholderType: "patient", - createNewCase: true, - resourceId: "TIRFRemsPatientEnrollment", - }, - { - name: "Prescriber Enrollment", - description: "Submit Prescriber Enrollment form to the REMS Administrator", - stakeholderType: "prescriber", - createNewCase: false, - resourceId: "TIRFPrescriberEnrollmentForm", - }, - { - name: "Prescriber Knowledge Assessment", - description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", - stakeholderType: "prescriber", - createNewCase: false, - resourceId: "TIRFPrescriberKnowledgeAssessment", - }, - { - name: "Pharmacist Enrollment", - description: "Submit Pharmacist Enrollment form to the REMS Administrator", - stakeholderType: "pharmacist", - createNewCase: false, - }, - { - name: "Pharmacist Knowledge Assessment", - description: "Submit Pharmacist Knowledge Assessment form to the REMS Administrator", - stakeholderType: "pharmacist", - createNewCase: false, - }, - ] - }, - { - name: "IPledge", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "6064", - requirements: [{ - name: "Patient Enrollment", - description: "Submit Patient Enrollment form to the REMS Administrator", - stakeholderType: "patient", - createNewCase: true, - resourceId: "IPledgeRemsPatientEnrollment", - }, - { - name: "Prescriber Enrollment", - description: "Submit Prescriber Enrollment form to the REMS Administrator", - stakeholderType: "prescriber", - createNewCase: false, - resourceId: "IPledgeRemsPrescriberEnrollmentForm" - }, - { - name: "Pharmacist Enrollment", - description: "Submit Pharmacist Enrollment form to the REMS Administrator", - stakeholderType: "pharmacist", - createNewCase: false, - }, - ] - }, - ], (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted Drug Information'); - }); - - metRequirementsCollection.insert([{ - stakeholderId: "Organization/pharm0111", - completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "Turalio", - duplicationId: 1 - }, - { - stakeholderId: "Organization/pharm0111", - completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "TIRF", - duplicationId: 2 - }, - { - stakeholderId: "Organization/pharm0111", - completed: true, - requirementName: "Pharmacist Knowledge Assessment", - drugName: "TIRF", - duplicationId: 3 - }, - { - stakeholderId: "Organization/pharm0111", - completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "IPledge", - duplicationId: 4 - }], (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted Pharmacist Met Requirements'); - }); + const medicationCollection = db.collection("medication-requirements"); + const metRequirementsCollection = db.collection("met-requirements"); + const remsCaseCollection = db.collection("rems-case"); + // etasu endpoints this.app.get('/etasu/:drug', (req: any, res: { send: (arg0: string) => any }) => { medicationCollection.findOne({ "name": req.params.drug }, (err: any, drug: any) => { if (err) throw err; @@ -328,6 +130,25 @@ class REMSServer extends Server { } ); + this.app.get('/etasu/met/patient/:patientName/drug/:drugName', (req: any, res: { send: (arg0: string) => any }) => { + remsCaseCollection.findOne({ patientName : req.params.patientName, drugName: req.params.drugName}, (err: any, remsCase: any) => { + if (err) throw err; + res.send(remsCase); + }); + } + ); + + this.app.post('/etasu/reset', (req: any, res: { send: (arg0: string) => any }) => { + console.log("Dropping collections"); + medicationCollection.drop(); + remsCaseCollection.drop(); + metRequirementsCollection.drop(); + console.log("Resetting the database"); + FhirUtilities.populateDB(); + res.send("reset etasu database collections"); + } + ); + this.app.post('/etasu/met', async (req: any, res: { send: (arg0: string) => any }) => { let returnedRemsRequestDoc: any; let returnedMetReqDoc: any; @@ -363,6 +184,8 @@ class REMSServer extends Server { let presciption = this.getResource(requestBody, prescriptionReference); let prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; let prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; + let patient = this.getResource(requestBody, patientReference); + let patientName = patient.name[0].given[0] + ' ' + patient.name[0].family; const drug = await medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem } // , (err: any, result: any) => { @@ -392,7 +215,8 @@ class REMSServer extends Server { case_number: case_number, status : remsRequestCompletedStatus, drugName: drug.name, - requirements : [], + patientName: patientName, + metRequirements : [], }; returnRemsRequest = true; @@ -401,56 +225,63 @@ class REMSServer extends Server { completed: true, completedQuestionnaire: questionnaireResponse, requirementName: requirement.name, + requirementDescription: requirement.description, drugName: drug.name, stakeholderId: reqStakeholderReference, case_numbers: [case_number], }; - const matchedMetReq = await metRequirementsCollection.insert(metReq + await metRequirementsCollection.insertOne(metReq // , (err: any, result: any) => { // if (err) console.log(err); // console.log('Inserted Matched Met Requirement'); // } ); + + const matchedMetReq = await metRequirementsCollection.findOne(metReq); + - remsRequest.requirements.push( + remsRequest.metRequirements.push( { stakeholderId : matchedMetReq.stakeholderId, completed : matchedMetReq.completed, metRequirementId: matchedMetReq._id, requirementName: matchedMetReq.requirementName, + requirementDescription: matchedMetReq.requirementDescription, } ); // iterate through all other reqs again to create corresponding false metReqs / assign to existing for (let requirement2 of drug.requirements) { // skip if the req found is the same as in the outer loop and has already been processed - if (!requirement2.resourceId === requirementId) { + if (!(requirement2.resourceId === requirementId)) { // figure out which stakeholder the req corresponds to let reqStakeholder2 = requirement2.stakeholderType; let reqStakeholder2Reference = reqStakeholder2 === "prescriber" ? practitionerReference : (reqStakeholder2 === "pharmacist" ? pharmacistReference : patientReference); const matchedMetReq2 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); if (matchedMetReq2) { - remsRequest.requirements.push( + remsRequest.metRequirements.push( { stakeholderId : matchedMetReq2.stakeholderId, completed : matchedMetReq2.completed, metRequirementId: matchedMetReq2._id, requirementName: matchedMetReq2.requirementName, + requirementDescription: matchedMetReq2.requirementDescription, } ); if(!matchedMetReq2.completed) { remsRequestCompletedStatus = "Pending"; } - matchedMetReq2.case_numbers.push(case_number); - await metRequirementsCollection.update({_id: matchedMetReq2._id}, matchedMetReq2); + // matchedMetReq2.case_numbers.push(case_number); + await metRequirementsCollection.updateOne(matchedMetReq2, {$addToSet: {case_numbers: case_number}}); } else { // create the metReq that was submitted let newMetReq = { completed: false, completedQuestionnaire: null, requirementName: requirement2.name, + requirementDescription: requirement2.description, drugName: drug.name, stakeholderId: reqStakeholder2Reference, case_numbers: [case_number], @@ -458,19 +289,23 @@ class REMSServer extends Server { remsRequestCompletedStatus = "Pending"; - const newMetReqDoc = await metRequirementsCollection.insert(newMetReq + await metRequirementsCollection.insertOne(newMetReq // , (err: any, result: any) => { // if (err) console.log(err); // console.log('Inserted New Met Requirement'); // } ); - remsRequest.requirements.push( + const newMetReqDoc = await metRequirementsCollection.findOne(newMetReq); + + + remsRequest.metRequirements.push( { stakeholderId : newMetReqDoc.stakeholderId, completed : newMetReqDoc.completed, metRequirementId: newMetReqDoc._id, requirementName: newMetReqDoc.requirementName, + requirementDescription: newMetReqDoc.requirementDescription, } ); } @@ -478,39 +313,51 @@ class REMSServer extends Server { } remsRequest.status = remsRequestCompletedStatus; - returnedRemsRequestDoc = await remsCaseCollection.insert(remsRequest + await remsCaseCollection.insertOne(remsRequest // , (err: any, result: any) => { // if (err) console.log(err); // console.log('Inserted Rems Case'); // } ); + returnedRemsRequestDoc = await remsCaseCollection.findOne(remsRequest); } else { const matchedMetReq3 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name}); if (matchedMetReq3) { - matchedMetReq3.completed = true; - matchedMetReq3.completedQuestionnaire = questionnaireResponse; - returnedMetReqDoc = await metRequirementsCollection.update({_id: matchedMetReq3._id}, matchedMetReq3); + // matchedMetReq3.completed = true; + // matchedMetReq3.completedQuestionnaire = questionnaireResponse; + await metRequirementsCollection.updateOne(matchedMetReq3, {$set: {completed: true, completedQuestionnaire: questionnaireResponse}}); + + returnedMetReqDoc = await metRequirementsCollection.findOne({_id: matchedMetReq3._id}); - const remsRequestsToUpdate = await remsCaseCollection.find({case_number: {$in: matchedMetReq3.case_numbers}}) + // this should be an array returned via .find() - tried using $in but could not get it to work - using the first element for now as a work around since we only have one patient + const remsRequestToUpdate = await remsCaseCollection.findOne({ case_number: returnedMetReqDoc.case_numbers[0] }); - for (let remsRequestToUpdate of remsRequestsToUpdate) { + // for (let remsRequestToUpdate of remsRequestsToUpdate) { let foundUncompleted = false; - remsRequestToUpdate.requirements.forEach((req4: any) => { - if(req4.metRequirementId === matchedMetReq3._id) { + let metReqArray = remsRequestToUpdate.metRequirements; + for (let i=0; i < remsRequestToUpdate.metRequirements.length; i++) { + let req4 = remsRequestToUpdate.metRequirements[i]; + // _id comparison would not work for some reason + if(req4.requirementName === matchedMetReq3.requirementName) { + metReqArray[i].completed = true; req4.completed = true; + const update = await remsCaseCollection.updateOne({_id: remsRequestToUpdate._id}, {$set: {metRequirements: metReqArray}}); } if(!req4.completed){ foundUncompleted = true; } - }); + } + // remsRequestToUpdate.metRequirements.forEach(async (req4: any, index: number) => { + + // }); if(!foundUncompleted && remsRequestToUpdate.status === "Pending") { - remsRequestToUpdate.status = "Approved"; + // remsRequestToUpdate.status = "Approved"; + await remsCaseCollection.updateOne(remsRequestToUpdate, {$set: {status: "Approved"}}); } - await remsCaseCollection.update({_id: remsRequestToUpdate._id}, remsRequestToUpdate); - - } + + // } } else { // create the metReq that was submitted @@ -518,17 +365,19 @@ class REMSServer extends Server { completed: true, completedQuestionnaire: questionnaireResponse, requirementName: requirement.name, + requirementDescription: requirement.requirementDescription, drugName: drug.name, stakeholderId: reqStakeholderReference, case_numbers: [], }; - returnedMetReqDoc = await metRequirementsCollection.insert(newMetReq3 + await metRequirementsCollection.insertOne(newMetReq3 // , (err: any, result: any) => { // if (err) console.log(err); // console.log('Inserted New Met Requirement'); // } ); + returnedMetReqDoc = await metRequirementsCollection.findOne(newMetReq3); } } break; From 91905c69f8e14926193c9c2f7feb6ba0a2ad7830 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 9 Feb 2023 15:53:46 -0500 Subject: [PATCH 70/83] double quotes lint to single quotes --- src/fhir/utilities.ts | 214 +++++++++++++++++++++--------------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 21806804..d81ffbe0 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -290,22 +290,22 @@ export class FhirUtilities { // define schemas - const medicationCollection = await db.collection("medication-requirements" + const medicationCollection = await db.collection('medication-requirements' // , { - // "name": { "type": "string" }, - // "codeSystem": { "type": "string" }, - // "code": { "type": "string" }, - // "requirements": { - // "type": "array", - // "items": { - // "type": "object", - // "properties": { - // "name": { "type": "string" }, - // "description": { "type": "string" }, - // "questionnaire": { "type": "object" }, - // "stakeholderType": { "type": "string" }, - // "createNewCase": { "type": "boolean" }, - // "resourceId": { "type": "string" } + // 'name': { 'type': 'string' }, + // 'codeSystem': { 'type': 'string' }, + // 'code': { 'type': 'string' }, + // 'requirements': { + // 'type': 'array', + // 'items': { + // 'type': 'object', + // 'properties': { + // 'name': { 'type': 'string' }, + // 'description': { 'type': 'string' }, + // 'questionnaire': { 'type': 'object' }, + // 'stakeholderType': { 'type': 'string' }, + // 'createNewCase': { 'type': 'boolean' }, + // 'resourceId': { 'type': 'string' } // } // } // } @@ -317,15 +317,15 @@ export class FhirUtilities { await medicationCollection.createIndex({ name: 1 }, { unique: true }); - const metRequirementsCollection = await db.collection("met-requirements" + const metRequirementsCollection = await db.collection('met-requirements' // , { - // "completed": { "type": "boolean" }, - // "completedQuestionnaire": { "type": "object" }, - // "requirementName": { "type": "string" }, - // "requirementDescription": {"type": "string"} - // "drugName": { "type": "string" }, - // "stakeholderId": { "type": "string" }, - // "case_numbers": { "type": "array", "items": { "type": "string" } } + // 'completed': { 'type': 'boolean' }, + // 'completedQuestionnaire': { 'type': 'object' }, + // 'requirementName': { 'type': 'string' }, + // 'requirementDescription': {'type': 'string'} + // 'drugName': { 'type': 'string' }, + // 'stakeholderId': { 'type': 'string' }, + // 'case_numbers': { 'type': 'array', 'items': { 'type': 'string' } } // }, (err: any, collection: any) => { // if (err) console.log(err); // } @@ -335,22 +335,22 @@ export class FhirUtilities { metRequirementsCollection.createIndex({ drugName: 1, requirementName: 1, stakeholderId: 1 }, { unique: true }); - const remsCaseCollection = await db.collection("rems-case" + const remsCaseCollection = await db.collection('rems-case' // , { - // "case_number": { "type": "string" }, - // "status": { "type": "string" }, - // "drugName": { "type": "string" }, - // "patientName": { "type": "string" }, - // "metRequirements": { - // "type": "array", - // "items": { - // "type": "object", - // "properties": { - // "metRequirementId": { "type": "number" }, - // "completed": { "type": "boolean" }, - // "stakeholderId": { "type": "string" }, - // "requirementName": { "type": "string" }, - // "requirementDescription": {"type": "string"}, + // 'case_number': { 'type': 'string' }, + // 'status': { 'type': 'string' }, + // 'drugName': { 'type': 'string' }, + // 'patientName': { 'type': 'string' }, + // 'metRequirements': { + // 'type': 'array', + // 'items': { + // 'type': 'object', + // 'properties': { + // 'metRequirementId': { 'type': 'number' }, + // 'completed': { 'type': 'boolean' }, + // 'stakeholderId': { 'type': 'string' }, + // 'requirementName': { 'type': 'string' }, + // 'requirementDescription': {'type': 'string'}, // } // } // } @@ -362,104 +362,104 @@ export class FhirUtilities { // prepopulateDB medicationCollection.insert([{ - name: "Turalio", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "2183126", + name: 'Turalio', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '2183126', requirements: [{ - name: "Patient Enrollment", - description: "Submit Patient Enrollment form to the REMS Administrator", - stakeholderType: "patient", + name: 'Patient Enrollment', + description: 'Submit Patient Enrollment form to the REMS Administrator', + stakeholderType: 'patient', createNewCase: true, - resourceId: "TuralioRemsPatientEnrollment", + resourceId: 'TuralioRemsPatientEnrollment', }, { - name: "Prescriber Enrollment", - description: "Submit Prescriber Enrollment form to the REMS Administrator", - stakeholderType: "prescriber", + name: 'Prescriber Enrollment', + description: 'Submit Prescriber Enrollment form to the REMS Administrator', + stakeholderType: 'prescriber', createNewCase: false, - resourceId: "TuralioPrescriberEnrollmentForm", + resourceId: 'TuralioPrescriberEnrollmentForm', }, { - name: "Prescriber Knowledge Assessment", - description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", - stakeholderType: "prescriber", + name: 'Prescriber Knowledge Assessment', + description: 'Submit Prescriber Knowledge Assessment form to the REMS Administrator', + stakeholderType: 'prescriber', createNewCase: false, - resourceId: "TuralioPrescriberKnowledgeAssessment", + resourceId: 'TuralioPrescriberKnowledgeAssessment', }, { - name: "Pharmacist Enrollment", - description: "Submit Pharmacist Enrollment form to the REMS Administrator", - stakeholderType: "pharmacist", + name: 'Pharmacist Enrollment', + description: 'Submit Pharmacist Enrollment form to the REMS Administrator', + stakeholderType: 'pharmacist', createNewCase: false, - resourceId: "TuralioPharmacistEnrollment", + resourceId: 'TuralioPharmacistEnrollment', }, ] }, { - name: "TIRF", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "1237051", + name: 'TIRF', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '1237051', requirements: [{ - name: "Patient Enrollment", - description: "Submit Patient Enrollment form to the REMS Administrator", - stakeholderType: "patient", + name: 'Patient Enrollment', + description: 'Submit Patient Enrollment form to the REMS Administrator', + stakeholderType: 'patient', createNewCase: true, - resourceId: "TIRFRemsPatientEnrollment", + resourceId: 'TIRFRemsPatientEnrollment', }, { - name: "Prescriber Enrollment", - description: "Submit Prescriber Enrollment form to the REMS Administrator", - stakeholderType: "prescriber", + name: 'Prescriber Enrollment', + description: 'Submit Prescriber Enrollment form to the REMS Administrator', + stakeholderType: 'prescriber', createNewCase: false, - resourceId: "TIRFPrescriberEnrollmentForm", + resourceId: 'TIRFPrescriberEnrollmentForm', }, { - name: "Prescriber Knowledge Assessment", - description: "Submit Prescriber Knowledge Assessment form to the REMS Administrator", - stakeholderType: "prescriber", + name: 'Prescriber Knowledge Assessment', + description: 'Submit Prescriber Knowledge Assessment form to the REMS Administrator', + stakeholderType: 'prescriber', createNewCase: false, - resourceId: "TIRFPrescriberKnowledgeAssessment", + resourceId: 'TIRFPrescriberKnowledgeAssessment', }, { - name: "Pharmacist Enrollment", - description: "Submit Pharmacist Enrollment form to the REMS Administrator", - stakeholderType: "pharmacist", + name: 'Pharmacist Enrollment', + description: 'Submit Pharmacist Enrollment form to the REMS Administrator', + stakeholderType: 'pharmacist', createNewCase: false, - resourceId: "TIRFPharmacistEnrollmentForm", + resourceId: 'TIRFPharmacistEnrollmentForm', }, { - name: "Pharmacist Knowledge Assessment", - description: "Submit Pharmacist Knowledge Assessment form to the REMS Administrator", - stakeholderType: "pharmacist", + name: 'Pharmacist Knowledge Assessment', + description: 'Submit Pharmacist Knowledge Assessment form to the REMS Administrator', + stakeholderType: 'pharmacist', createNewCase: false, - resourceId: "TIRFPharmacistKnowledgeAssessment", + resourceId: 'TIRFPharmacistKnowledgeAssessment', }, ] }, { - name: "IPledge", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "6064", + name: 'IPledge', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '6064', requirements: [{ - name: "Patient Enrollment", - description: "Submit Patient Enrollment form to the REMS Administrator", - stakeholderType: "patient", + name: 'Patient Enrollment', + description: 'Submit Patient Enrollment form to the REMS Administrator', + stakeholderType: 'patient', createNewCase: true, - resourceId: "IPledgeRemsPatientEnrollment", + resourceId: 'IPledgeRemsPatientEnrollment', }, { - name: "Prescriber Enrollment", - description: "Submit Prescriber Enrollment form to the REMS Administrator", - stakeholderType: "prescriber", + name: 'Prescriber Enrollment', + description: 'Submit Prescriber Enrollment form to the REMS Administrator', + stakeholderType: 'prescriber', createNewCase: false, - resourceId: "IPledgeRemsPrescriberEnrollmentForm" + resourceId: 'IPledgeRemsPrescriberEnrollmentForm' }, { - name: "Pharmacist Enrollment", - description: "Submit Pharmacist Enrollment form to the REMS Administrator", - stakeholderType: "pharmacist", + name: 'Pharmacist Enrollment', + description: 'Submit Pharmacist Enrollment form to the REMS Administrator', + stakeholderType: 'pharmacist', createNewCase: false, - resourceId: "IPledgeRemsPharmacistEnrollmentForm" + resourceId: 'IPledgeRemsPharmacistEnrollmentForm' }, ] }, @@ -469,34 +469,34 @@ export class FhirUtilities { }); metRequirementsCollection.insert([{ - stakeholderId: "Organization/pharm0111", + stakeholderId: 'Organization/pharm0111', completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "Turalio", + requirementName: 'Pharmacist Enrollment', + drugName: 'Turalio', completedQuestionnaire: null, case_numbers: [], }, { - stakeholderId: "Organization/pharm0111", + stakeholderId: 'Organization/pharm0111', completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "TIRF", + requirementName: 'Pharmacist Enrollment', + drugName: 'TIRF', completedQuestionnaire: null, case_numbers: [], }, { - stakeholderId: "Organization/pharm0111", + stakeholderId: 'Organization/pharm0111', completed: true, - requirementName: "Pharmacist Knowledge Assessment", - drugName: "TIRF", + requirementName: 'Pharmacist Knowledge Assessment', + drugName: 'TIRF', completedQuestionnaire: null, case_numbers: [], }, { - stakeholderId: "Organization/pharm0111", + stakeholderId: 'Organization/pharm0111', completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "IPledge", + requirementName: 'Pharmacist Enrollment', + drugName: 'IPledge', completedQuestionnaire: null, case_numbers: [], }], (err: any, result: any) => { From ce6505e611eee6a1013cf483a2e5acd465af45b9 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 9 Feb 2023 15:57:22 -0500 Subject: [PATCH 71/83] linting change double quotes to single --- src/server.ts | 54 +++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/server.ts b/src/server.ts index 85e0bd2d..c3018ae0 100644 --- a/src/server.ts +++ b/src/server.ts @@ -109,13 +109,13 @@ class REMSServer extends Server { configureEtasuEndpoints() { const db = Globals.database; - const medicationCollection = db.collection("medication-requirements"); - const metRequirementsCollection = db.collection("met-requirements"); - const remsCaseCollection = db.collection("rems-case"); + const medicationCollection = db.collection('medication-requirements'); + const metRequirementsCollection = db.collection('met-requirements'); + const remsCaseCollection = db.collection('rems-case'); // etasu endpoints this.app.get('/etasu/:drug', (req: any, res: { send: (arg0: string) => any }) => { - medicationCollection.findOne({ "name": req.params.drug }, (err: any, drug: any) => { + medicationCollection.findOne({ 'name': req.params.drug }, (err: any, drug: any) => { if (err) throw err; res.send(drug); }); @@ -123,7 +123,7 @@ class REMSServer extends Server { ); this.app.get('/etasu/met/:caseId', (req: any, res: { send: (arg0: string) => any }) => { - remsCaseCollection.findOne({ "case_number": req.params.caseId }, (err: any, remsCase: any) => { + remsCaseCollection.findOne({ 'case_number': req.params.caseId }, (err: any, remsCase: any) => { if (err) throw err; res.send(remsCase); }); @@ -139,13 +139,13 @@ class REMSServer extends Server { ); this.app.post('/etasu/reset', (req: any, res: { send: (arg0: string) => any }) => { - console.log("Dropping collections"); + console.log('Dropping collections'); medicationCollection.drop(); remsCaseCollection.drop(); metRequirementsCollection.drop(); - console.log("Resetting the database"); + console.log('Resetting the database'); FhirUtilities.populateDB(); - res.send("reset etasu database collections"); + res.send('reset etasu database collections'); } ); @@ -158,24 +158,24 @@ class REMSServer extends Server { // extract params and questionnaire response identifier let params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); let questionnaireResponse = this.getQuestionnaireResponse(requestBody); - let questionnaireStringArray = questionnaireResponse.questionnaire.split("/"); + let questionnaireStringArray = questionnaireResponse.questionnaire.split('/'); let requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; // stakeholder and medication references - let prescriptionReference = ""; - let practitionerReference = ""; - let pharmacistReference = ""; - let patientReference = ""; + let prescriptionReference = ''; + let practitionerReference = ''; + let pharmacistReference = ''; + let patientReference = ''; for (let param of params.parameter) { - if (param.name === "prescription") { + if (param.name === 'prescription') { prescriptionReference = param.reference; } - else if (param.name === "prescriber") { + else if (param.name === 'prescriber') { practitionerReference = param.reference; } - else if (param.name === "pharmacy") { + else if (param.name === 'pharmacy') { pharmacistReference = param.reference; - } else if (param.name === "source-patient") { + } else if (param.name === 'source-patient') { patientReference = param.reference; } } @@ -199,7 +199,7 @@ class REMSServer extends Server { for (let requirement of drug.requirements) { // figure out which stakeholder the req corresponds to let reqStakeholder = requirement.stakeholderType; - let reqStakeholderReference = reqStakeholder === "prescriber" ? practitionerReference : (reqStakeholder === "pharmacist" ? pharmacistReference : patientReference); + let reqStakeholderReference = reqStakeholder === 'prescriber' ? practitionerReference : (reqStakeholder === 'pharmacist' ? pharmacistReference : patientReference); // if the requirement is the one submitted continue if (requirement.resourceId === requirementId) { @@ -210,7 +210,7 @@ class REMSServer extends Server { const case_number = uid(); // create new rems request and add the created metReq to it - let remsRequestCompletedStatus = "Approved"; + let remsRequestCompletedStatus = 'Approved'; let remsRequest: any = { case_number: case_number, status : remsRequestCompletedStatus, @@ -257,7 +257,7 @@ class REMSServer extends Server { if (!(requirement2.resourceId === requirementId)) { // figure out which stakeholder the req corresponds to let reqStakeholder2 = requirement2.stakeholderType; - let reqStakeholder2Reference = reqStakeholder2 === "prescriber" ? practitionerReference : (reqStakeholder2 === "pharmacist" ? pharmacistReference : patientReference); + let reqStakeholder2Reference = reqStakeholder2 === 'prescriber' ? practitionerReference : (reqStakeholder2 === 'pharmacist' ? pharmacistReference : patientReference); const matchedMetReq2 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); if (matchedMetReq2) { @@ -271,7 +271,7 @@ class REMSServer extends Server { } ); if(!matchedMetReq2.completed) { - remsRequestCompletedStatus = "Pending"; + remsRequestCompletedStatus = 'Pending'; } // matchedMetReq2.case_numbers.push(case_number); await metRequirementsCollection.updateOne(matchedMetReq2, {$addToSet: {case_numbers: case_number}}); @@ -287,7 +287,7 @@ class REMSServer extends Server { case_numbers: [case_number], }; - remsRequestCompletedStatus = "Pending"; + remsRequestCompletedStatus = 'Pending'; await metRequirementsCollection.insertOne(newMetReq // , (err: any, result: any) => { @@ -351,9 +351,9 @@ class REMSServer extends Server { // }); - if(!foundUncompleted && remsRequestToUpdate.status === "Pending") { - // remsRequestToUpdate.status = "Approved"; - await remsCaseCollection.updateOne(remsRequestToUpdate, {$set: {status: "Approved"}}); + if(!foundUncompleted && remsRequestToUpdate.status === 'Pending') { + // remsRequestToUpdate.status = 'Approved'; + await remsCaseCollection.updateOne(remsRequestToUpdate, {$set: {status: 'Approved'}}); } @@ -396,7 +396,7 @@ class REMSServer extends Server { } getResource(bundle: { entry: any[]; }, resourceReference: string) { - let temp = resourceReference.split("/"); + let temp = resourceReference.split('/'); let _resourceType = temp[0]; let _id = temp[1]; @@ -410,7 +410,7 @@ class REMSServer extends Server { } getQuestionnaireResponse(bundle: { entry: any[]; }) { - let _resourceType = "QuestionnaireResponse"; + let _resourceType = 'QuestionnaireResponse'; for (let i = 0; i < bundle.entry.length; i++) { if ((bundle.entry[i].resource.resourceType === _resourceType)) { From f7132ba43871e835b19a23f755b63a72846bf29f Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 9 Feb 2023 16:02:01 -0500 Subject: [PATCH 72/83] linting --- src/server.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server.ts b/src/server.ts index c3018ae0..e084b42b 100644 --- a/src/server.ts +++ b/src/server.ts @@ -156,17 +156,17 @@ class REMSServer extends Server { const requestBody = req.body; // extract params and questionnaire response identifier - let params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); - let questionnaireResponse = this.getQuestionnaireResponse(requestBody); - let questionnaireStringArray = questionnaireResponse.questionnaire.split('/'); - let requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; + const params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); + const questionnaireResponse = this.getQuestionnaireResponse(requestBody); + const questionnaireStringArray = questionnaireResponse.questionnaire.split('/'); + const requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; // stakeholder and medication references let prescriptionReference = ''; let practitionerReference = ''; let pharmacistReference = ''; let patientReference = ''; - for (let param of params.parameter) { + for (const param of params.parameter) { if (param.name === 'prescription') { prescriptionReference = param.reference; } @@ -181,11 +181,11 @@ class REMSServer extends Server { } // obtain drug information from database - let presciption = this.getResource(requestBody, prescriptionReference); - let prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; - let prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; - let patient = this.getResource(requestBody, patientReference); - let patientName = patient.name[0].given[0] + ' ' + patient.name[0].family; + const presciption = this.getResource(requestBody, prescriptionReference); + const prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; + const prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; + const patient = this.getResource(requestBody, patientReference); + const patientName = patient.name[0].given[0] + ' ' + patient.name[0].family; const drug = await medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem } // , (err: any, result: any) => { From e45faf0c45e0a4bac7c2f3fa83637dcc83e9eeec Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 9 Feb 2023 16:09:03 -0500 Subject: [PATCH 73/83] linting --- src/server.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server.ts b/src/server.ts index e084b42b..573ca2d1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -196,10 +196,10 @@ class REMSServer extends Server { // } ); // iterate through each requirement of the drug - for (let requirement of drug.requirements) { + for (const requirement of drug.requirements) { // figure out which stakeholder the req corresponds to - let reqStakeholder = requirement.stakeholderType; - let reqStakeholderReference = reqStakeholder === 'prescriber' ? practitionerReference : (reqStakeholder === 'pharmacist' ? pharmacistReference : patientReference); + const reqStakeholder = requirement.stakeholderType; + const reqStakeholderReference = reqStakeholder === 'prescriber' ? practitionerReference : (reqStakeholder === 'pharmacist' ? pharmacistReference : patientReference); // if the requirement is the one submitted continue if (requirement.resourceId === requirementId) { @@ -211,7 +211,7 @@ class REMSServer extends Server { // create new rems request and add the created metReq to it let remsRequestCompletedStatus = 'Approved'; - let remsRequest: any = { + const remsRequest: any = { case_number: case_number, status : remsRequestCompletedStatus, drugName: drug.name, @@ -221,7 +221,7 @@ class REMSServer extends Server { returnRemsRequest = true; // create the metReq that was submitted - let metReq = { + const metReq = { completed: true, completedQuestionnaire: questionnaireResponse, requirementName: requirement.name, @@ -252,12 +252,12 @@ class REMSServer extends Server { ); // iterate through all other reqs again to create corresponding false metReqs / assign to existing - for (let requirement2 of drug.requirements) { + for (const requirement2 of drug.requirements) { // skip if the req found is the same as in the outer loop and has already been processed if (!(requirement2.resourceId === requirementId)) { // figure out which stakeholder the req corresponds to - let reqStakeholder2 = requirement2.stakeholderType; - let reqStakeholder2Reference = reqStakeholder2 === 'prescriber' ? practitionerReference : (reqStakeholder2 === 'pharmacist' ? pharmacistReference : patientReference); + const reqStakeholder2 = requirement2.stakeholderType; + const reqStakeholder2Reference = reqStakeholder2 === 'prescriber' ? practitionerReference : (reqStakeholder2 === 'pharmacist' ? pharmacistReference : patientReference); const matchedMetReq2 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); if (matchedMetReq2) { @@ -277,7 +277,7 @@ class REMSServer extends Server { await metRequirementsCollection.updateOne(matchedMetReq2, {$addToSet: {case_numbers: case_number}}); } else { // create the metReq that was submitted - let newMetReq = { + const newMetReq = { completed: false, completedQuestionnaire: null, requirementName: requirement2.name, @@ -334,7 +334,7 @@ class REMSServer extends Server { // for (let remsRequestToUpdate of remsRequestsToUpdate) { let foundUncompleted = false; - let metReqArray = remsRequestToUpdate.metRequirements; + const metReqArray = remsRequestToUpdate.metRequirements; for (let i=0; i < remsRequestToUpdate.metRequirements.length; i++) { let req4 = remsRequestToUpdate.metRequirements[i]; // _id comparison would not work for some reason From 333bdc3a31f9779582ba63aad13fbcd58885e90c Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Thu, 9 Feb 2023 16:16:27 -0500 Subject: [PATCH 74/83] linting --- src/server.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server.ts b/src/server.ts index 573ca2d1..677d0b43 100644 --- a/src/server.ts +++ b/src/server.ts @@ -336,7 +336,7 @@ class REMSServer extends Server { let foundUncompleted = false; const metReqArray = remsRequestToUpdate.metRequirements; for (let i=0; i < remsRequestToUpdate.metRequirements.length; i++) { - let req4 = remsRequestToUpdate.metRequirements[i]; + const req4 = remsRequestToUpdate.metRequirements[i]; // _id comparison would not work for some reason if(req4.requirementName === matchedMetReq3.requirementName) { metReqArray[i].completed = true; @@ -361,7 +361,7 @@ class REMSServer extends Server { } else { // create the metReq that was submitted - let newMetReq3 = { + const newMetReq3 = { completed: true, completedQuestionnaire: questionnaireResponse, requirementName: requirement.name, @@ -396,9 +396,9 @@ class REMSServer extends Server { } getResource(bundle: { entry: any[]; }, resourceReference: string) { - let temp = resourceReference.split('/'); - let _resourceType = temp[0]; - let _id = temp[1]; + const temp = resourceReference.split('/'); + const _resourceType = temp[0]; + const _id = temp[1]; for (let i = 0; i < bundle.entry.length; i++) { if ((bundle.entry[i].resource.resourceType === _resourceType) @@ -410,7 +410,7 @@ class REMSServer extends Server { } getQuestionnaireResponse(bundle: { entry: any[]; }) { - let _resourceType = 'QuestionnaireResponse'; + const _resourceType = 'QuestionnaireResponse'; for (let i = 0; i < bundle.entry.length; i++) { if ((bundle.entry[i].resource.resourceType === _resourceType)) { From dd0d055b5762db4d87c124343f44851ba5740ad2 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Thu, 9 Feb 2023 17:19:56 -0500 Subject: [PATCH 75/83] Update the embedded CQL / ELM in all of the Library files. --- .../R4/resources/Library-R4-IPledge-prepopulation.json | 4 ++-- ...ibrary-R4-IPledgePrescriberEnrollment-prepopulation.json | 4 ++-- .../Library-R4-BasicClinicalInfo-prepopulation.json | 4 ++-- .../Library-R4-BasicPatientInfo-prepopulation.json | 4 ++-- .../Library-R4-BasicPractitionerInfo-prepopulation.json | 4 ++-- .../Library-R4-CDS_Connect_Commons_for_FHIRv400.json | 4 ++-- .../CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json | 4 ++-- .../Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json | 4 ++-- .../Library-R4-TIRFPrescriberEnrollment-prepopulation.json | 4 ++-- .../R4/resources/Library-R4-Turalio-prepopulation.json | 6 +++--- ...ibrary-R4-TuralioPrescriberEnrollment-prepopulation.json | 4 ++-- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json index 85880ef1..dd08c2d0 100644 --- a/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json +++ b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledge-prepopulation.json @@ -93,7 +93,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiSVBsZWRnZVByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0LCJzdGFydENoYXIiOjEsImVuZExpbmUiOjQsImVuZENoYXIiOjY3LCJtZXNzYWdlIjoiQ291bGQgbm90IGxvYWQgc291cmNlIGZvciBsaWJyYXJ5IENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeVZlcnNpb25JZCI6IjEuMC4yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IklQbGVkZ2VQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NSwic3RhcnRDaGFyIjoxLCJlbmRMaW5lIjo1LCJlbmRDaGFyIjo0NSwibWVzc2FnZSI6IkNvdWxkIG5vdCBsb2FkIHNvdXJjZSBmb3IgbGlicmFyeSBEVFJIZWxwZXJzLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiRFRSSGVscGVycyIsInRhcmdldEluY2x1ZGVMaWJyYXJ5VmVyc2lvbklkIjoiMC4xLjAiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IklQbGVkZ2VQcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJjb2RlU3lzdGVtcyI6eyJkZWYiOlt7Im5hbWUiOiJJQ0QtMTAtQ00iLCJpZCI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbSIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiTE9JTkMiLCJpZCI6Imh0dHA6Ly9sb2luYy5vcmciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9LHsibmFtZSI6IlNOT01FRC1DVCIsImlkIjoiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiUlhOT1JNIiwiaWQiOiJodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIklQbGVkZ2VQcmVwb3B1bGF0aW9uIiwKICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImluY2x1ZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAicGF0aCIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiQ0RTIiwKICAgICAgICAgICAgInBhdGgiIDogIkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjEuMC4yIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkRUUiIsCiAgICAgICAgICAgICJwYXRoIiA6ICJEVFJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVTeXN0ZW1zIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIklDRC0xMC1DTSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vbG9pbmMub3JnIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNOT01FRC1DVCIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSWE5PUk0iLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] -} \ No newline at end of file +} diff --git a/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json index 23c1e32d..a2ade020 100644 --- a/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json +++ b/src/cds-library/CRD-DTR/IPledge/R4/resources/Library-R4-IPledgePrescriberEnrollment-prepopulation.json @@ -107,7 +107,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiSVBsZWRnZVByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjIwLCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MjAsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJJUGxlZGdlUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MjAsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoyMCwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjo0MywiZW5kTGluZSI6NDgsImVuZENoYXIiOjQ3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjoxMzIsImVuZExpbmUiOjQ4LCJlbmRDaGFyIjoxMzYsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJ2ZXJzaW9uIjoiMC4xLjAifSwic2NoZW1hSWRlbnRpZmllciI6eyJpZCI6InVybjpobDctb3JnOmVsbSIsInZlcnNpb24iOiJyMSJ9LCJ1c2luZ3MiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJTeXN0ZW0iLCJ1cmkiOiJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEifSx7ImxvY2FsSWRlbnRpZmllciI6IkZISVIiLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwiaW5jbHVkZXMiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJGSElSSGVscGVycyIsInBhdGgiOiJGSElSSGVscGVycyIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInBhcmFtZXRlcnMiOnsiZGVmIjpbeyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6Im1lZGljYXRpb25fcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6Ik9uY29sb2dpc3QiLCJpZCI6IjM5NDU5MjAwNCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiU05PTUVELUNUIn19XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6IlF1YWxpZmljYXRpb25zIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sibmFtZSI6IlF1YWxpZmljYXRpb25zIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJQcmFjdGl0aW9uZXJSb2xlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJwcm9sZSIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InByYWN0aXRpb25lciIsInNjb3BlIjoicHJvbGUiLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6IlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJTcGVjaWFsdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZXMiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InNwZWNpYWx0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUHJhY3RpdGlvbmVyUm9sZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19LHsibmFtZSI6IlByZWZlcnJlZENvbW11bmljYXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoidGVsZWNvbSIsImV4cHJlc3Npb24iOnsicGF0aCI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJhbmsiLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19XX19LHsibmFtZSI6Ik9yZ05hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im9yZyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdfX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7Im5hbWUiOiJNRCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InR5cGUiLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiTUQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJWYWxpZElQbGVkZ2VDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJxdWFsaWZpY2F0aW9uIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiI2MDY0IiwidHlwZSI6IkxpdGVyYWwifV19XX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5SXNzdWVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJkaXNwbGF5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJpc3N1ZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiSVBsZWRnZVByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJsaWJyYXJ5VmVyc2lvbiIgOiAiMC4xLjAiLAogICAgICAgICAic3RhcnRMaW5lIiA6IDIwLAogICAgICAgICAic3RhcnRDaGFyIiA6IDEyMywKICAgICAgICAgImVuZExpbmUiIDogMjAsCiAgICAgICAgICJlbmRDaGFyIiA6IDEyNywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiAyMCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMjMsCiAgICAgICAgICJlbmRMaW5lIiA6IDIwLAogICAgICAgICAiZW5kQ2hhciIgOiAxMjcsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSwgewogICAgICAgICAibGlicmFyeUlkIiA6ICJJUGxlZGdlUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogNDgsCiAgICAgICAgICJzdGFydENoYXIiIDogNDMsCiAgICAgICAgICJlbmRMaW5lIiA6IDQ4LAogICAgICAgICAiZW5kQ2hhciIgOiA0NywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIklQbGVkZ2VQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiA0OCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMzIsCiAgICAgICAgICJlbmRMaW5lIiA6IDQ4LAogICAgICAgICAiZW5kQ2hhciIgOiAxMzYsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSBdLAogICAgICAiaWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAiSVBsZWRnZVByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSUNELTEwLUNNIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9sb2luYy5vcmciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9uY29sb2dpc3QiLAogICAgICAgICAgICAiaWQiIDogIjM5NDU5MjAwNCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29udGV4dHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJzdGF0ZW1lbnRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvZGF5IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlRvZGF5IgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2FsZXNjZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJkZXZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwZXJmb3JtZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlcXVlc3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiUHJhY3RpdGlvbmVyLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJRdWFsaWZpY2F0aW9ucyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDcmVkZW50aWFscyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJRdWFsaWZpY2F0aW9ucyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQcmFjdGl0aW9uZXJSb2xlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAicHJvbGUiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJhY3RpdGlvbmVyUm9sZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAicHJvbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNwZWNpYWx0eSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlcyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzcGVjaWFsdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlByYWN0aXRpb25lclJvbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlYWJsZUNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJlZmVycmVkQ29tbXVuaWNhdGlvbiIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyYW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9yZ05hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIm9yZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNRCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIk1EIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQW5kIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiNjA2NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInRleHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZhbGlkSVBsZWRnZUNyZWRlbnRpYWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRoaXJkUGFydHlJc3N1ZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlciIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmFsaWRJUGxlZGdlQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] - } \ No newline at end of file + } diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json index 3b04eb6a..93173921 100644 --- a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicClinicalInfo-prepopulation.json @@ -34,7 +34,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTgsInN0YXJ0Q2hhciI6MTI0LCJlbmRMaW5lIjoxOCwiZW5kQ2hhciI6MTI4LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkJhc2ljQ2xpbmljYWxJbmZvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjE4LCJzdGFydENoYXIiOjEyNCwiZW5kTGluZSI6MTgsImVuZENoYXIiOjEyOCwibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJCYXNpY0NsaW5pY2FsSW5mb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjoxMDYsInN0YXJ0Q2hhciI6NTEsImVuZExpbmUiOjEwNiwiZW5kQ2hhciI6NTQsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTIxLCJzdGFydENoYXIiOjQzLCJlbmRMaW5lIjoxMjEsImVuZENoYXIiOjQ2LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkJhc2ljQ2xpbmljYWxJbmZvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjEyMiwic3RhcnRDaGFyIjozOSwiZW5kTGluZSI6MTIyLCJlbmRDaGFyIjo0MiwibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn1dLCJpZGVudGlmaWVyIjp7ImlkIjoiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJwYXJhbWV0ZXJzIjp7ImRlZiI6W3sibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlcnZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJjb2RlU3lzdGVtcyI6eyJkZWYiOlt7Im5hbWUiOiJITDctVjItMDEzNiIsImlkIjoiaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMTM2IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifV19LCJjb2RlcyI6eyJkZWYiOlt7Im5hbWUiOiJZZXMiLCJpZCI6IlkiLCJkaXNwbGF5IjoiWWVzIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJITDctVjItMDEzNiJ9fSx7Im5hbWUiOiJObyIsImlkIjoiTiIsImRpc3BsYXkiOiJObyIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiSEw3LVYyLTAxMzYifX1dfSwiY29udGV4dHMiOnsiZGVmIjpbeyJuYW1lIjoiUGF0aWVudCJ9XX0sInN0YXRlbWVudHMiOnsiZGVmIjpbeyJuYW1lIjoiUGF0aWVudCIsImNvbnRleHQiOiJQYXRpZW50IiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwidHlwZSI6IlJldHJpZXZlIn19fSx7Im5hbWUiOiJUb2RheSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJUb2RheSJ9fSx7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJSZXF1ZXN0RW5jb3VudGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuY291bnRlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZW5jb3VudGVyIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZW5jb3VudGVyIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX1dfX0seyJuYW1lIjoiUmVxdWVzdEVuY291bnRlciIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJFIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJFbmNvdW50ZXIvIiwidHlwZSI6IkxpdGVyYWwifSx7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiaWQiLCJzY29wZSI6IkUiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiUmVxdWVzdEVuY291bnRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19LHsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXJEYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7Im5hbWUiOiJSZXF1ZXN0RW5jb3VudGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX0sInRoZW4iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJwZXJpb2QiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InBlcmlvZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InN0YXJ0IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sImVsc2UiOnsidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX19LHsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXJQYXJ0aWNpcGFudHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUmVxdWVzdEVuY291bnRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InBhcnRpY2lwYW50IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJwYXJ0aWNpcGFudCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX19LHsibmFtZSI6IlJlcXVlc3RFbmNvdW50ZXJGaXJzdFBhcnRpY2lwYW50UmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7Im5hbWUiOiJSZXF1ZXN0RW5jb3VudGVyUGFydGljaXBhbnRzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX0sInRoZW4iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImluZGl2aWR1YWwiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiUmVxdWVzdEVuY291bnRlclBhcnRpY2lwYW50cyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX0sImVsc2UiOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJuYW1lIjoiUmVxdWVzdEVuY291bnRlckZpcnN0UGFydGljaXBhbnRSZWZlcmVuY2UiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJOYW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJuYW1lIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidXNlIiwic2NvcGUiOiJuYW1lIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Im9mZmljaWFsIiwidHlwZSI6IkxpdGVyYWwifV19fSx7InBhdGgiOiJuYW1lIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX1dfX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJMYXN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZmFtaWx5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiR2V0TWlkZGxlSW5pdGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU3Vic3RyaW5nIiwic3RyaW5nVG9TdWIiOnsidHlwZSI6IkNvbWJpbmUiLCJzb3VyY2UiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImdpdmVuIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Im5hbWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU3Vic3RyaW5nIiwic3RyaW5nVG9TdWIiOnsicGF0aCI6InZhbHVlIiwic2NvcGUiOiJnaXZlbiIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJzdGFydEluZGV4Ijp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn0sImxlbmd0aCI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9fX19LCJzZXBhcmF0b3IiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiwgIiwidHlwZSI6IkxpdGVyYWwifX0sInN0YXJ0SW5kZXgiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIzIiwidHlwZSI6IkxpdGVyYWwifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJuYW1lIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUh1bWFuTmFtZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJHZXRNaWRkbGVJbml0aWFscyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX0seyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlckZpcnN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJnaXZlbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlck5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn1dfX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJGdWxsTmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyRmlyc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgIiwidHlwZSI6IkxpdGVyYWwifV19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJNaWRkbGVJbml0aWFsIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlckxhc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTlBJIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImlkZW50aWZpZXIiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvdXMtbnBpIiwidHlwZSI6IkxpdGVyYWwifV19fX19fX0seyJuYW1lIjoiRW5jb3VudGVyUHJvdmlkZXJMYXN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJ0aGVuIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTGFzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fX19LHsibmFtZSI6IkVuY291bnRlclByb3ZpZGVyTWlkZGxlSW5pdGlhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJ0aGVuIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0sImVsc2UiOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiRW5jb3VudGVyUHJvdmlkZXJGaXJzdE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiSWYiLCJjb25kaXRpb24iOnsibmFtZSI6IklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSwidGhlbiI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlckZpcnN0TmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0sImVsc2UiOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiRW5jb3VudGVyUHJvdmlkZXJGdWxsTmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJuYW1lIjoiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJ0aGVuIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyRnVsbE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fX19LHsibmFtZSI6IkVuY291bnRlclByb3ZpZGVyTlBJIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7Im5hbWUiOiJJc0VuY291bnRlclByb3ZpZGVyU2FtZUFzT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0sInRoZW4iOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXJOUEkiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fX19LHsibmFtZSI6IkFuc3dlclllcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJZZXMiLCJ0eXBlIjoiQ29kZVJlZiJ9fSx7Im5hbWUiOiJBbnN3ZXJObyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJObyIsInR5cGUiOiJDb2RlUmVmIn19LHsibmFtZSI6IkNvbmZpcm1lZEFsbGVyZ2llcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiQWxsZXJneUxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2ZXJpZmljYXRpb25TdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiY29uZmlybWVkIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IkFsbGVyZ3lMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQ29kZXNGcm9tQWxsZXJnaWVzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJBbGxlcmd5TGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiQWxsZXJneUNvZGluZ3MiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDT0RJTkciLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvQ29kZSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiQ09ESU5HIiwidHlwZSI6IkFsaWFzUmVmIn1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJBbGxlcmd5Q29kaW5ncyIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fX19fSwib3BlcmFuZCI6W3sibmFtZSI6IkFsbGVyZ3lMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWxsZXJnaWVzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvZGVzRnJvbUFsbGVyZ2llcyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25maXJtZWRBbGxlcmdpZXMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJSZXRyaWV2ZSJ9XX1dfX0seyJuYW1lIjoiQWN0aXZlQ29uZmlybWVkRGlhZ25vc2VzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJDb25kTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiRGlhZ25vc2VzQ29kaW5ncyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkNPRElORyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN5c3RlbSIsInNjb3BlIjoiQ09ESU5HIiwidHlwZSI6IlByb3BlcnR5In19LHsidHlwZSI6Ikxpc3QiLCJlbGVtZW50IjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvQ29kZSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiQ09ESU5HIiwidHlwZSI6IkFsaWFzUmVmIn1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQW5kIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sibmFtZSI6IlRvU3RyaW5nIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InZlcmlmaWNhdGlvblN0YXR1cyIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dfSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb25maXJtZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY2xpbmljYWxTdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19XX0seyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InJlbGFwc2UiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfV19LHsidHlwZSI6IkV4aXN0cyIsIm9wZXJhbmQiOnsibmFtZSI6IkRpYWdub3Nlc0NvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX1dfSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IkRpYWdub3Nlc0NvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFsbERpYWdub3NlcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJBY3RpdmVDb25maXJtZWREaWFnbm9zZXMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInR5cGUiOiJSZXRyaWV2ZSJ9XX19LHsibmFtZSI6IlByb2NlZHVyZUNvZGluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJEaXN0aW5jdCIsIm9wZXJhbmQiOnsidHlwZSI6IkZsYXR0ZW4iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJQIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUHJvY2VkdXJlTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiUHJvY2VkdXJlQ29kaW5ncyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkNPRElORyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlByb2NlZHVyZUNvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJQcm9jZWR1cmVMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWxsUHJvY2VkdXJlcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jZWR1cmVDb2RpbmciLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJSZXRyaWV2ZSJ9XX19LHsibmFtZSI6IlRydWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLCJ2YWx1ZSI6InRydWUiLCJ0eXBlIjoiTGl0ZXJhbCJ9fSx7Im5hbWUiOiJHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJEaXN0aW5jdCIsIm9wZXJhbmQiOnsidHlwZSI6IkZsYXR0ZW4iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJNZWRTdGF0ZW1lbnQiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRTdGF0ZW1lbnRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJNZWRpY2F0aW9uTGlzdCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkNPRElORyIsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoibWVkaWNhdGlvbiIsInNjb3BlIjoiTWVkU3RhdGVtZW50IiwidHlwZSI6IlByb3BlcnR5In19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7InR5cGUiOiJUdXBsZSIsImVsZW1lbnQiOlt7Im5hbWUiOiJSeE5vcm0iLCJ2YWx1ZSI6eyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJwYXRoIjoiZGlzcGxheSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiItIiwidHlwZSI6IkxpdGVyYWwifV19LHsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29kZSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiQ09ESU5HIiwidHlwZSI6IkFsaWFzUmVmIn1dfX1dfX0seyJuYW1lIjoiRGVzY3JpcHRpb24iLCJ2YWx1ZSI6eyJwYXRoIjoiZGlzcGxheSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fX1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRpY2F0aW9uTGlzdCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fX19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik1lZFN0YXRlbWVudExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiTWVkaWNhdGlvblR1cGxlTGlzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdCIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9XX19XX19fQ==" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogMTgsCiAgICAgICAgICJzdGFydENoYXIiIDogMTI0LAogICAgICAgICAiZW5kTGluZSIgOiAxOCwKICAgICAgICAgImVuZENoYXIiIDogMTI4LAogICAgICAgICAibWVzc2FnZSIgOiAiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLAogICAgICAgICAiZXJyb3JUeXBlIiA6ICJzZW1hbnRpYyIsCiAgICAgICAgICJlcnJvclNldmVyaXR5IiA6ICJ3YXJuaW5nIiwKICAgICAgICAgInR5cGUiIDogIkNxbFRvRWxtRXJyb3IiCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogMTgsCiAgICAgICAgICJzdGFydENoYXIiIDogMTI0LAogICAgICAgICAiZW5kTGluZSIgOiAxOCwKICAgICAgICAgImVuZENoYXIiIDogMTI4LAogICAgICAgICAibWVzc2FnZSIgOiAiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLAogICAgICAgICAiZXJyb3JUeXBlIiA6ICJzZW1hbnRpYyIsCiAgICAgICAgICJlcnJvclNldmVyaXR5IiA6ICJ3YXJuaW5nIiwKICAgICAgICAgInR5cGUiIDogIkNxbFRvRWxtRXJyb3IiCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogMTA2LAogICAgICAgICAic3RhcnRDaGFyIiA6IDUxLAogICAgICAgICAiZW5kTGluZSIgOiAxMDYsCiAgICAgICAgICJlbmRDaGFyIiA6IDU0LAogICAgICAgICAibWVzc2FnZSIgOiAiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLAogICAgICAgICAiZXJyb3JUeXBlIiA6ICJzZW1hbnRpYyIsCiAgICAgICAgICJlcnJvclNldmVyaXR5IiA6ICJ3YXJuaW5nIiwKICAgICAgICAgInR5cGUiIDogIkNxbFRvRWxtRXJyb3IiCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogMTIxLAogICAgICAgICAic3RhcnRDaGFyIiA6IDQzLAogICAgICAgICAiZW5kTGluZSIgOiAxMjEsCiAgICAgICAgICJlbmRDaGFyIiA6IDQ2LAogICAgICAgICAibWVzc2FnZSIgOiAiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLAogICAgICAgICAiZXJyb3JUeXBlIiA6ICJzZW1hbnRpYyIsCiAgICAgICAgICJlcnJvclNldmVyaXR5IiA6ICJ3YXJuaW5nIiwKICAgICAgICAgInR5cGUiIDogIkNxbFRvRWxtRXJyb3IiCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiQmFzaWNDbGluaWNhbEluZm9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogMTIyLAogICAgICAgICAic3RhcnRDaGFyIiA6IDM5LAogICAgICAgICAiZW5kTGluZSIgOiAxMjIsCiAgICAgICAgICJlbmRDaGFyIiA6IDQyLAogICAgICAgICAibWVzc2FnZSIgOiAiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLAogICAgICAgICAiZXJyb3JUeXBlIiA6ICJzZW1hbnRpYyIsCiAgICAgICAgICJlcnJvclNldmVyaXR5IiA6ICJ3YXJuaW5nIiwKICAgICAgICAgInR5cGUiIDogIkNxbFRvRWxtRXJyb3IiCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIkJhc2ljQ2xpbmljYWxJbmZvUHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSEw3LVYyLTAxMzYiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDEzNiIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlllcyIsCiAgICAgICAgICAgICJpZCIgOiAiWSIsCiAgICAgICAgICAgICJkaXNwbGF5IiA6ICJZZXMiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkhMNy1WMi0wMTM2IgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk5vIiwKICAgICAgICAgICAgImlkIiA6ICJOIiwKICAgICAgICAgICAgImRpc3BsYXkiIDogIk5vIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJITDctVjItMDEzNiIKICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvbnRleHRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAic3RhdGVtZW50cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb2RheSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb2RheSIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwZXJmb3JtZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImRldmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmZvcm1lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAic2VydmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJtZWRpY2F0aW9uX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAicHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJQcmFjdGl0aW9uZXIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImRldmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZW5jb3VudGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJzZXJ2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJlcXVlc3RFbmNvdW50ZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkUiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIkVuY291bnRlci8iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiRSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUmVxdWVzdEVuY291bnRlckRhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUmVxdWVzdEVuY291bnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUmVxdWVzdEVuY291bnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyUGFydGljaXBhbnRzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkZsYXR0ZW4iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGFydGljaXBhbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwYXJ0aWNpcGFudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyRmlyc3RQYXJ0aWNpcGFudFJlZmVyZW5jZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyUGFydGljaXBhbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpbmRpdmlkdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJSZXF1ZXN0RW5jb3VudGVyUGFydGljaXBhbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXJSZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUmVxdWVzdEVuY291bnRlckZpcnN0UGFydGljaXBhbnRSZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlck5hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlVuaW9uIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInVzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJvZmZpY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyTGFzdE5hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogImZhbWlseSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlck5hbWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU3Vic3RyaW5nIiwKICAgICAgICAgICAgICAgInN0cmluZ1RvU3ViIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbWJpbmUiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImdpdmVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU3Vic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZ1RvU3ViIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0SW5kZXgiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAic2VwYXJhdG9yIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiwgIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInN0YXJ0SW5kZXgiIDogewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIm5hbWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlck1pZGRsZUluaXRpYWwiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXJOYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXJGaXJzdE5hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImdpdmVuIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyTmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlckZ1bGxOYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyRmlyc3ROYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXJNaWRkbGVJbml0aWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyTGFzdE5hbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlck5QSSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC91cy1ucGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJFbmNvdW50ZXJQcm92aWRlckxhc3ROYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlckxhc3ROYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJFbmNvdW50ZXJQcm92aWRlck1pZGRsZUluaXRpYWwiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyTWlkZGxlSW5pdGlhbCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRW5jb3VudGVyUHJvdmlkZXJGaXJzdE5hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiSXNFbmNvdW50ZXJQcm92aWRlclNhbWVBc09yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyRmlyc3ROYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJFbmNvdW50ZXJQcm92aWRlckZ1bGxOYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIklzRW5jb3VudGVyUHJvdmlkZXJTYW1lQXNPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlckZ1bGxOYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJFbmNvdW50ZXJQcm92aWRlck5QSSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJJc0VuY291bnRlclByb3ZpZGVyU2FtZUFzT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXJOUEkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFuc3dlclllcyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJZZXMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbnN3ZXJObyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJObyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2RlUmVmIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNvbmZpcm1lZEFsbGVyZ2llcyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiQyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFsbGVyZ3lMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZlcmlmaWNhdGlvblN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiY29uZmlybWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiQWxsZXJneUxpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWxsZXJneUludG9sZXJhbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb2Rlc0Zyb21BbGxlcmdpZXMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5TGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIkFsbGVyZ3lDb2RpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFsbGVyZ3lDb2RpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiQWxsZXJneUxpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWxsZXJneUludG9sZXJhbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmdpZXMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiQ29kZXNGcm9tQWxsZXJnaWVzIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25maXJtZWRBbGxlcmdpZXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBY3RpdmVDb25maXJtZWREaWFnbm9zZXMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIkRpYWdub3Nlc0NvZGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmVyaWZpY2F0aW9uU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJjb25maXJtZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNsaW5pY2FsU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAicmVsYXBzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJEaWFnbm9zZXNDb2RpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRGlhZ25vc2VzQ29kaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWxsRGlhZ25vc2VzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkFjdGl2ZUNvbmZpcm1lZERpYWdub3NlcyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJvY2VkdXJlQ29kaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkRpc3RpbmN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRmxhdHRlbiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJQIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUHJvY2VkdXJlTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIlByb2NlZHVyZUNvZGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jZWR1cmVDb2RpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiUHJvY2VkdXJlTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFsbFByb2NlZHVyZXMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiUHJvY2VkdXJlQ29kaW5nIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvY2VkdXJlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUcnVlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgInZhbHVlIiA6ICJ0cnVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk1lZFN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZFN0YXRlbWVudExpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJsZXQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJNZWRpY2F0aW9uTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm1lZGljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk1lZFN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUdXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUnhOb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZGlzcGxheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICItIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkRlc2NyaXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZGljYXRpb25MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkU3RhdGVtZW50TGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2F0aW9uVHVwbGVMaXN0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE1lZGljYXRpb25zVHVwbGVMaXN0IiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] -} \ No newline at end of file +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json index 0a7eaf1c..6c55521e 100644 --- a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPatientInfo-prepopulation.json @@ -29,7 +29,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkJhc2ljUGF0aWVudEluZm9QcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMi4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJwYXJhbWV0ZXJzIjp7ImRlZiI6W3sibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlcnZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IkdldE1pZGRsZUluaXRpYWxzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InR5cGUiOiJDb21iaW5lIiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJnaXZlbiIsImV4cHJlc3Npb24iOnsicGF0aCI6ImdpdmVuIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJuYW1lIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InBhdGgiOiJ2YWx1ZSIsInNjb3BlIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkifSwic3RhcnRJbmRleCI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9LCJsZW5ndGgiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIxIiwidHlwZSI6IkxpdGVyYWwifX19fSwic2VwYXJhdG9yIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIsICIsInR5cGUiOiJMaXRlcmFsIn19LCJzdGFydEluZGV4Ijp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMyIsInR5cGUiOiJMaXRlcmFsIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoibmFtZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiTmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoibmFtZSIsImV4cHJlc3Npb24iOnsicGF0aCI6Im5hbWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlBhdGllbnQiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InVzZSIsInNjb3BlIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJvZmZpY2lhbCIsInR5cGUiOiJMaXRlcmFsIn1dfX19fSx7Im5hbWUiOiJMYXN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZmFtaWx5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJOYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19fSx7Im5hbWUiOiJNaWRkbGVJbml0aWFsIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkdldE1pZGRsZUluaXRpYWxzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6Ik5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX19LHsibmFtZSI6IkZpcnN0TmFtZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJnaXZlbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJuYW1lIjoiRnVsbE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29hbGVzY2UiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJuYW1lIjoiRmlyc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgIiwidHlwZSI6IkxpdGVyYWwifV19LHsibmFtZSI6Ik1pZGRsZUluaXRpYWwiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiICIsInR5cGUiOiJMaXRlcmFsIn1dfSx7Im5hbWUiOiJMYXN0TmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfSx7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJDb25jYXRlbmF0ZSIsIm9wZXJhbmQiOlt7Im5hbWUiOiJGaXJzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiTGFzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX1dfX0seyJuYW1lIjoiR2VuZGVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJnZW5kZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlBhdGllbnQiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LHsibmFtZSI6IkRhdGVPZkJpcnRoIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJiaXJ0aERhdGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlBhdGllbnQiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LHsibmFtZSI6IlJlcXVlc3RDb3ZlcmFnZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InBhdGgiOiJpbnN1cmFuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fSx7InBhdGgiOiJpbnN1cmFuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX0seyJwYXRoIjoiaW5zdXJhbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19XX19LHsibmFtZSI6IkNvdmVyYWdlUmVzb3VyY2UiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImNvdmVyYWdlIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvdmVyYWdlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IkNvdmVyYWdlLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJjb3ZlcmFnZSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX1dfSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sibmFtZSI6IlJlcXVlc3RDb3ZlcmFnZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fV19fX19LHsibmFtZSI6Ik1lZGljYXJlSWQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN1YnNjcmliZXJJZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiQ292ZXJhZ2VSZXNvdXJjZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiSG9tZUFkZHJlc3MiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImFkZHJlc3MiLCJleHByZXNzaW9uIjp7InBhdGgiOiJhZGRyZXNzIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJQYXRpZW50IiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6ImFkZHJlc3MiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaG9tZSIsInR5cGUiOiJMaXRlcmFsIn1dfX19fSx7Im5hbWUiOiJMaW5lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6ImxpbmUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IkhvbWVBZGRyZXNzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fSx7Im5hbWUiOiJDaXR5IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjaXR5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJIb21lQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiU3RhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXRlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJIb21lQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiWmlwIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJwb3N0YWxDb2RlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJIb21lQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiVGVsZWNvbSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJ0ZWxlY29tIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidGVsZWNvbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUGF0aWVudCIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InBob25lIiwidHlwZSI6IkxpdGVyYWwifV19fV19fSx7Im5hbWUiOiJQaG9uZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRlbGVjb20iLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19XX19fQ==" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIkJhc2ljUGF0aWVudEluZm9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgInZlcnNpb24iIDogIjAuMi4wIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImluY2x1ZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAicGF0aCIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAicGFyYW1ldGVycyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJkZXZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlUmVxdWVzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAic2VydmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAicGFyYW1ldGVyVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TZXJ2aWNlUmVxdWVzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAicGFyYW1ldGVyVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJjb250ZXh0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInN0YXRlbWVudHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiR2V0TWlkZGxlSW5pdGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU3Vic3RyaW5nIiwKICAgICAgICAgICAgICAgInN0cmluZ1RvU3ViIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbWJpbmUiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImdpdmVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU3Vic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZ1RvU3ViIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0SW5kZXgiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAic2VwYXJhdG9yIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiwgIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInN0YXJ0SW5kZXgiIDogewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIm5hbWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SHVtYW5OYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9kYXkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiVG9kYXkiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTmFtZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ1c2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAib2ZmaWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhc3ROYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJmYW1pbHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk5hbWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWlkZGxlSW5pdGlhbCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRNaWRkbGVJbml0aWFscyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTmFtZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJGaXJzdE5hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImdpdmVuIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJOYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJGdWxsTmFtZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2FsZXNjZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkZpcnN0TmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNaWRkbGVJbml0aWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXN0TmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJGaXJzdE5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiICIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGFzdE5hbWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdlbmRlciIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkRhdGVPZkJpcnRoIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJiaXJ0aERhdGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUmVxdWVzdENvdmVyYWdlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpbnN1cmFuY2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImRldmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpbnN1cmFuY2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaW5zdXJhbmNlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJtZWRpY2F0aW9uX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNvdmVyYWdlUmVzb3VyY2UiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJjb3ZlcmFnZSIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db3ZlcmFnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJDb3ZlcmFnZS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiY292ZXJhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUmVxdWVzdENvdmVyYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1lZGljYXJlSWQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN1YnNjcmliZXJJZCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ292ZXJhZ2VSZXNvdXJjZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJIb21lQWRkcmVzcyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogImFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJhZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ1c2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogImFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiaG9tZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGluZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibGluZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiSG9tZUFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNpdHkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNpdHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkhvbWVBZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlN0YXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGF0ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiSG9tZUFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiWmlwIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwb3N0YWxDb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJIb21lQWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUZWxlY29tIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJwaG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQaG9uZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] -} \ No newline at end of file +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json index 98cb980d..8d2ef06b 100644 --- a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-BasicPractitionerInfo-prepopulation.json @@ -29,7 +29,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiQmFzaWNQcmFjdGl0aW9uZXJJbmZvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjE2LCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MTYsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJCYXNpY1ByYWN0aXRpb25lckluZm9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTYsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoxNiwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifV0sImlkZW50aWZpZXIiOnsiaWQiOiJCYXNpY1ByYWN0aXRpb25lckluZm9QcmVwb3B1bGF0aW9uIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJwYXJhbWV0ZXJzIjp7ImRlZiI6W3sibmFtZSI6ImRldmljZV9yZXF1ZXN0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJzZXJ2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlcnZpY2VSZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IkdldE1pZGRsZUluaXRpYWxzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InR5cGUiOiJDb21iaW5lIiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJnaXZlbiIsImV4cHJlc3Npb24iOnsicGF0aCI6ImdpdmVuIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJuYW1lIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsidHlwZSI6IlN1YnN0cmluZyIsInN0cmluZ1RvU3ViIjp7InBhdGgiOiJ2YWx1ZSIsInNjb3BlIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkifSwic3RhcnRJbmRleCI6eyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9LCJsZW5ndGgiOnsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIxIiwidHlwZSI6IkxpdGVyYWwifX19fSwic2VwYXJhdG9yIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIsICIsInR5cGUiOiJMaXRlcmFsIn19LCJzdGFydEluZGV4Ijp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMyIsInR5cGUiOiJMaXRlcmFsIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoibmFtZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IdW1hbk5hbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6Ik5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlVuaW9uIiwib3BlcmFuZCI6W3sidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im5hbWUiLCJleHByZXNzaW9uIjp7InBhdGgiOiJuYW1lIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6Im5hbWUiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoib2ZmaWNpYWwiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19LHsicGF0aCI6Im5hbWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fV19fX0seyJuYW1lIjoiTGFzdE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImZhbWlseSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiTmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiTWlkZGxlSW5pdGlhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJHZXRNaWRkbGVJbml0aWFscyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJOYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJGaXJzdE5hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoiZ2l2ZW4iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn1dfX19LHsibmFtZSI6IkZ1bGxOYW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sidHlwZSI6IkNvbmNhdGVuYXRlIiwib3BlcmFuZCI6W3sibmFtZSI6IkZpcnN0TmFtZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiICIsInR5cGUiOiJMaXRlcmFsIn1dfSx7Im5hbWUiOiJNaWRkbGVJbml0aWFsIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6IiAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiTGFzdE5hbWUiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX0seyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJuYW1lIjoiRmlyc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgIiwidHlwZSI6IkxpdGVyYWwifV19LHsibmFtZSI6Ikxhc3ROYW1lIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19XX19LHsibmFtZSI6Ik5QSSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJpZGVudGlmaWVyIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL3VzLW5waSIsInR5cGUiOiJMaXRlcmFsIn1dfX19fX19LHsibmFtZSI6IkFkZHJlc3MiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlVuaW9uIiwib3BlcmFuZCI6W3sidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6ImFkZHJlc3MiLCJleHByZXNzaW9uIjp7InBhdGgiOiJhZGRyZXNzIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6ImFkZHJlc3MiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoicG9zdGFsIiwidHlwZSI6IkxpdGVyYWwifV19LHsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1c2UiLCJzY29wZSI6ImFkZHJlc3MiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoid29yayIsInR5cGUiOiJMaXRlcmFsIn1dfV19fSx7InBhdGgiOiJhZGRyZXNzIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX1dfX19LHsibmFtZSI6IkxpbmUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJsaW5lIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJBZGRyZXNzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX0seyJuYW1lIjoiQ2l0eSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY2l0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiQWRkcmVzcyIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiU3RhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXRlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJBZGRyZXNzIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19fSx7Im5hbWUiOiJaaXAiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBvc3RhbENvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IkFkZHJlc3MiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LHsibmFtZSI6IlBob25lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InRlbGVjb20iLCJleHByZXNzaW9uIjp7InBhdGgiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoicGhvbmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJFbWFpbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJ0ZWxlY29tIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidGVsZWNvbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImVtYWlsIiwidHlwZSI6IkxpdGVyYWwifV19fX19fX0seyJuYW1lIjoiRmF4IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InRlbGVjb20iLCJleHByZXNzaW9uIjp7InBhdGgiOiJ0ZWxlY29tIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPcmRlcmluZ1Byb3ZpZGVyIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiZmF4IiwidHlwZSI6IkxpdGVyYWwifV19fX19fX1dfX19" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiQmFzaWNQcmFjdGl0aW9uZXJJbmZvUHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJsaWJyYXJ5VmVyc2lvbiIgOiAiMC4xLjAiLAogICAgICAgICAic3RhcnRMaW5lIiA6IDE2LAogICAgICAgICAic3RhcnRDaGFyIiA6IDEyMywKICAgICAgICAgImVuZExpbmUiIDogMTYsCiAgICAgICAgICJlbmRDaGFyIiA6IDEyNywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIkJhc2ljUHJhY3RpdGlvbmVySW5mb1ByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiAxNiwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMjMsCiAgICAgICAgICJlbmRMaW5lIiA6IDE2LAogICAgICAgICAiZW5kQ2hhciIgOiAxMjcsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSBdLAogICAgICAiaWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAiQmFzaWNQcmFjdGl0aW9uZXJJbmZvUHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29udGV4dHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJzdGF0ZW1lbnRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdldE1pZGRsZUluaXRpYWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlN1YnN0cmluZyIsCiAgICAgICAgICAgICAgICJzdHJpbmdUb1N1YiIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb21iaW5lIiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJnaXZlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlN1YnN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmdUb1N1YiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydEluZGV4IiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGgiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgInNlcGFyYXRvciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIsICIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJzdGFydEluZGV4IiA6IHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUh1bWFuTmFtZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvZGF5IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlRvZGF5IgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2FsZXNjZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJkZXZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwZXJmb3JtZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlcXVlc3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiUHJhY3RpdGlvbmVyLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJOYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJVbmlvbiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ1c2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAib2ZmaWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGFzdE5hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogImZhbWlseSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNaWRkbGVJbml0aWFsIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE1pZGRsZUluaXRpYWxzIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJOYW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkZpcnN0TmFtZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZ2l2ZW4iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkZ1bGxOYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRmlyc3ROYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1pZGRsZUluaXRpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiAiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhc3ROYW1lIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkZpcnN0TmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXN0TmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTlBJIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL3VzLW5waSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFkZHJlc3MiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlVuaW9uIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ1c2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogImFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAicG9zdGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInVzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJ3b3JrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJhZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMaW5lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImxpbmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNpdHkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNpdHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU3RhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXRlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlppcCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAicG9zdGFsQ29kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQaG9uZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJwaG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkVtYWlsIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImVtYWlsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRmF4IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImZheCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9CiAgIH0KfQ==" } ] -} \ No newline at end of file +} diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json index a5274b56..85aef81d 100644 --- a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-CDS_Connect_Commons_for_FHIRv400.json @@ -26,7 +26,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwidmVyc2lvbiI6IjEuMC4yIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJjb2RlU3lzdGVtcyI6eyJkZWYiOlt7Im5hbWUiOiJBSVZFUlNUQVRVUyIsImlkIjoiaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9hbGxlcmd5aW50b2xlcmFuY2UtdmVyaWZpY2F0aW9uIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJBSUNMSU5TVEFUVVMiLCJpZCI6Imh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vYWxsZXJneWludG9sZXJhbmNlLWNsaW5pY2FsIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJDT05EVkVSU1RBVFVTIiwiaWQiOiJodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi12ZXItc3RhdHVzIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJDT05EQ0xJTlNUQVRVUyIsImlkIjoiaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jb25kaXRpb24tY2xpbmljYWwiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6IkFsbGVyZ3lJbnRvbGVyYW5jZSBDb25maXJtZWQgY29kZSIsImlkIjoiY29uZmlybWVkIiwiZGlzcGxheSI6IkNvbmZpcm1lZCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiQUlWRVJTVEFUVVMifX0seyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlIEFjdGl2ZSBjb2RlIiwiaWQiOiJhY3RpdmUiLCJkaXNwbGF5IjoiQWN0aXZlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJBSUNMSU5TVEFUVVMifX0seyJuYW1lIjoiQ29uZGl0aW9uIENvbmZpcm1lZCBjb2RlIiwiaWQiOiJjb25maXJtZWQiLCJkaXNwbGF5IjoiQ29uZmlybWVkIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJDT05EVkVSU1RBVFVTIn19LHsibmFtZSI6IkNvbmRpdGlvbiBBY3RpdmUgY29kZSIsImlkIjoiYWN0aXZlIiwiZGlzcGxheSI6IkFjdGl2ZSIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiQ09ORENMSU5TVEFUVVMifX0seyJuYW1lIjoiQ29uZGl0aW9uIFJlY3VycmVuY2UgY29kZSIsImlkIjoicmVjdXJyZW5jZSIsImRpc3BsYXkiOiJSZWN1cnJlbmNlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJDT05EQ0xJTlNUQVRVUyJ9fSx7Im5hbWUiOiJDb25kaXRpb24gUmVsYXBzZSBjb2RlIiwiaWQiOiJyZWxhcHNlIiwiZGlzcGxheSI6IlJlbGFwc2UiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGVTeXN0ZW0iOnsibmFtZSI6IkNPTkRDTElOU1RBVFVTIn19XX0sImNvbmNlcHRzIjp7ImRlZiI6W3sibmFtZSI6IkFsbGVyZ3lJbnRvbGVyYW5jZSBDb25maXJtZWQiLCJkaXNwbGF5IjoiQ29uZmlybWVkIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlIjpbeyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlIENvbmZpcm1lZCBjb2RlIn1dfSx7Im5hbWUiOiJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIiwiZGlzcGxheSI6IkFjdGl2ZSIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZSI6W3sibmFtZSI6IkFsbGVyZ3lJbnRvbGVyYW5jZSBBY3RpdmUgY29kZSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIENvbmZpcm1lZCIsImRpc3BsYXkiOiJDb25maXJtZWQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGUiOlt7Im5hbWUiOiJDb25kaXRpb24gQ29uZmlybWVkIGNvZGUifV19LHsibmFtZSI6IkNvbmRpdGlvbiBBY3RpdmUiLCJkaXNwbGF5IjoiQWN0aXZlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlIjpbeyJuYW1lIjoiQ29uZGl0aW9uIEFjdGl2ZSBjb2RlIn1dfSx7Im5hbWUiOiJDb25kaXRpb24gUmVjdXJyZW5jZSIsImRpc3BsYXkiOiJSZWN1cnJlbmNlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlIjpbeyJuYW1lIjoiQ29uZGl0aW9uIFJlY3VycmVuY2UgY29kZSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIFJlbGFwc2UiLCJkaXNwbGF5IjoiUmVsYXBzZSIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZSI6W3sibmFtZSI6IkNvbmRpdGlvbiBSZWxhcHNlIGNvZGUifV19XX0sInN0YXRlbWVudHMiOnsiZGVmIjpbeyJuYW1lIjoiUGVyaW9kVG9JbnRlcnZhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsidHlwZSI6IkludGVydmFsVHlwZVNwZWNpZmllciIsInBvaW50VHlwZSI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LCJlbHNlIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InBlcmlvZCIsInR5cGUiOiJPcGVyYW5kUmVmIn19fSwiaGlnaCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJwZXJpb2QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlJhbmdlVG9JbnRlcnZhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoicmFuZ2UiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwidGhlbiI6eyJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn0sImFzVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiSW50ZXJ2YWxUeXBlU3BlY2lmaWVyIiwicG9pbnRUeXBlIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0sImVsc2UiOnsibG93Q2xvc2VkIjp0cnVlLCJoaWdoQ2xvc2VkIjp0cnVlLCJ0eXBlIjoiSW50ZXJ2YWwiLCJsb3ciOnsibmFtZSI6IlRvUXVhbnRpdHkiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImxvdyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoicmFuZ2UiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV19LCJoaWdoIjp7Im5hbWUiOiJUb1F1YW50aXR5IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJoaWdoIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJyYW5nZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6InJhbmdlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJhbmdlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik9ic2VydmF0aW9uc0J5Q29uY2VwdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJPIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJLb25jZXB0IiwidHlwZSI6Ik9wZXJhbmRSZWYifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IktvbmNlcHQiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlZlcmlmaWVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik8iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJPYnNMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImZpbmFsIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb3JyZWN0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImFtZW5kZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJXaXRoVW5pdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJPIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiT2JzTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1bml0IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX0seyJuYW1lIjoiVW5pdCIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSx7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInNjb3BlIjoiTyIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsibmFtZSI6IlVuaXQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiVW5pdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJPYnNlcnZhdGlvbkxvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik8iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJPYnNMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfSx7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJzY29wZSI6Ik8iLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX1dfSx7InR5cGUiOiJPdmVybGFwcyIsIm9wZXJhbmQiOlt7Im5hbWUiOiJQZXJpb2RUb0ludGVydmFsIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19XX0seyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6Imlzc3VlZCIsInNjb3BlIjoiTyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik9ic0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik1vc3RSZWNlbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGFzdCIsInNvdXJjZSI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTyIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik9ic0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sInNvcnQiOnsiYnkiOlt7ImRpcmVjdGlvbiI6ImFzYyIsInR5cGUiOiJCeUV4cHJlc3Npb24iLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoiZWZmZWN0aXZlIiwidHlwZSI6IklkZW50aWZpZXJSZWYifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoiZWZmZWN0aXZlIiwidHlwZSI6IklkZW50aWZpZXJSZWYifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Imlzc3VlZCIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn19XX19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik9ic0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlF1YW50aXR5VmFsdWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9RdWFudGl0eSIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnMiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiQ29uY2VwdFZhbHVlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LCJvcGVyYW5kIjpbeyJuYW1lIjoiT2JzIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkZpbmREYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6ImVmZmVjdGl2ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9icyIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWluc3RhbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZW5kIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6ImVmZmVjdGl2ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGFydCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9icyIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiaXNzdWVkIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJPYnMiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX1dfSwib3BlcmFuZCI6W3sibmFtZSI6Ik9icyIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJIaWdoZXN0T2JzZXJ2YXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTWF4Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJPIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiT2JzTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvUXVhbnRpdHkiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJzY29wZSI6Ik8iLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19fSwib3BlcmFuZCI6W3sibmFtZSI6Ik9ic0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkNvbmRpdGlvbnNCeUNvbmNlcHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImNvZGUiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiS29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiQ29uZmlybWVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJDb25kTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2ZXJpZmljYXRpb25TdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IkNvbmRpdGlvbiBDb25maXJtZWQiLCJ0eXBlIjoiQ29uY2VwdFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiQ29uZExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJBY3RpdmVDb25kaXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiQW5kIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjbGluaWNhbFN0YXR1cyIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIEFjdGl2ZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfSx7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJhYmF0ZW1lbnQiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFjdGl2ZU9yUmVjdXJyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJDb25kTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjbGluaWNhbFN0YXR1cyIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiQ29uZGl0aW9uIEFjdGl2ZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfSx7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY2xpbmljYWxTdGF0dXMiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IkNvbmRpdGlvbiBSZWN1cnJlbmNlIiwidHlwZSI6IkNvbmNlcHRSZWYifV19XX0seyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImNsaW5pY2FsU3RhdHVzIiwic2NvcGUiOiJDIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJDb25kaXRpb24gUmVsYXBzZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfV19fSwib3BlcmFuZCI6W3sibmFtZSI6IkNvbmRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQ29uZGl0aW9uTG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoib25zZXQiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19LHsidHlwZSI6Ik92ZXJsYXBzIiwib3BlcmFuZCI6W3sibmFtZSI6IlBlcmlvZFRvSW50ZXJ2YWwiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJvbnNldCIsInNjb3BlIjoiQyIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19LHsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWNvcmRlZERhdGUiLCJzY29wZSI6IkMiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik1vc3RSZWNlbnRDb25kaXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGFzdCIsInNvdXJjZSI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJzb3J0Ijp7ImJ5IjpbeyJkaXJlY3Rpb24iOiJhc2MiLCJ0eXBlIjoiQnlFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29hbGVzY2UiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoib25zZXQiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJvbnNldCIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGFydCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJvbnNldCIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJyZWNvcmRlZERhdGUiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9fV19fV19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlByb2NlZHVyZXNCeUNvbmNlcHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUCIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImNvZGUiLCJzY29wZSI6IlAiLCJ0eXBlIjoiUHJvcGVydHkifV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiS29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiQ29tcGxldGVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlAiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6IlAiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiY29tcGxldGVkIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiUHJvY2VkdXJlSW5Qcm9ncmVzcyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJQIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUHJvY0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJQIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImluLXByb2dyZXNzIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiUHJvY2VkdXJlUGVyZm9ybWFuY2UiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUCIsImV4cHJlc3Npb24iOnsibmFtZSI6IlByb2NMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InByZXBhcmF0aW9uIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJub3QtZG9uZSIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiZW50ZXJlZC1pbi1lcnJvciIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoidW5rbm93biIsInR5cGUiOiJMaXRlcmFsIn1dfV19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJQcm9jTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlByb2NlZHVyZUxvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlAiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiTG9va0JhY2tJbnRlcnZhbCIsImV4cHJlc3Npb24iOnsibG93Q2xvc2VkIjp0cnVlLCJoaWdoQ2xvc2VkIjp0cnVlLCJ0eXBlIjoiSW50ZXJ2YWwiLCJsb3ciOnsidHlwZSI6IlN1YnRyYWN0Iiwib3BlcmFuZCI6W3sidHlwZSI6Ik5vdyJ9LHsibmFtZSI6Ikxvb2tCYWNrIiwidHlwZSI6Ik9wZXJhbmRSZWYifV19LCJoaWdoIjp7InR5cGUiOiJOb3cifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InBlcmZvcm1lZCIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX0seyJ0eXBlIjoiT3ZlcmxhcHMiLCJvcGVyYW5kIjpbeyJuYW1lIjoiUGVyaW9kVG9JbnRlcnZhbCIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InBlcmZvcm1lZCIsInNjb3BlIjoiUCIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTW9zdFJlY2VudFByb2NlZHVyZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMYXN0Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJQIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiUHJvY0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sInNvcnQiOnsiYnkiOlt7ImRpcmVjdGlvbiI6ImFzYyIsInR5cGUiOiJCeUV4cHJlc3Npb24iLCJleHByZXNzaW9uIjp7InR5cGUiOiJDb2FsZXNjZSIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJwZXJmb3JtZWQiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7Im5hbWUiOiJwZXJmb3JtZWQiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fSx7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJuYW1lIjoicGVyZm9ybWVkIiwidHlwZSI6IklkZW50aWZpZXJSZWYifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX1dfX1dfX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiUHJvY0xpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvY2VkdXJlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdEFjdGl2ZU9yQ29tcGxldGVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlMiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdExpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJTIiwidHlwZSI6IlByb3BlcnR5In19LHsidHlwZSI6Ikxpc3QiLCJlbGVtZW50IjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiYWN0aXZlIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb21wbGV0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IlNlcnZpY2VSZXF1ZXN0TG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUyIsImV4cHJlc3Npb24iOnsibmFtZSI6IlNlcnZpY2VSZXF1ZXN0TGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJhdXRob3JlZE9uIiwic2NvcGUiOiJTIiwidHlwZSI6IlByb3BlcnR5In19LHsibG93Q2xvc2VkIjp0cnVlLCJoaWdoQ2xvc2VkIjp0cnVlLCJ0eXBlIjoiSW50ZXJ2YWwiLCJsb3ciOnsidHlwZSI6IlN1YnRyYWN0Iiwib3BlcmFuZCI6W3sidHlwZSI6Ik5vdyJ9LHsibmFtZSI6Ikxvb2tCYWNrIiwidHlwZSI6Ik9wZXJhbmRSZWYifV19LCJoaWdoIjp7InR5cGUiOiJOb3cifX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJTZXJ2aWNlUmVxdWVzdExpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ik1lZGljYXRpb25TdGF0ZW1lbnRzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJtZWRpY2F0aW9uIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiS29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTWVkaWNhdGlvblJlcXVlc3RzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1aXZhbGVudCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb0NvbmNlcHQiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoibWVkaWNhdGlvbiIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJLb25jZXB0IiwidHlwZSI6Ik9wZXJhbmRSZWYifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IktvbmNlcHQiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkFjdGl2ZU1lZGljYXRpb25TdGF0ZW1lbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTSIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik1lZExpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6IkVmZmVjdGl2ZVBlcmlvZCIsImV4cHJlc3Npb24iOnsibmFtZSI6IlBlcmlvZFRvSW50ZXJ2YWwiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJlZmZlY3RpdmUiLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifSwiYXNUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkFuZCIsIm9wZXJhbmQiOlt7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImFjdGl2ZSIsInR5cGUiOiJMaXRlcmFsIn1dfSx7InR5cGUiOiJPciIsIm9wZXJhbmQiOlt7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InR5cGUiOiJFbmQiLCJvcGVyYW5kIjp7Im5hbWUiOiJFZmZlY3RpdmVQZXJpb2QiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19LHsidHlwZSI6IkFmdGVyIiwib3BlcmFuZCI6W3sidHlwZSI6IkVuZCIsIm9wZXJhbmQiOnsibmFtZSI6IkVmZmVjdGl2ZVBlcmlvZCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fSx7InR5cGUiOiJOb3cifV19XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJNZWRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFjdGl2ZU1lZGljYXRpb25SZXF1ZXN0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWN0aXZlT3JDb21wbGV0ZWRNZWRpY2F0aW9uUmVxdWVzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJNIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiTWVkTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiYWN0aXZlIiwidHlwZSI6IkxpdGVyYWwifV19LHsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiY29tcGxldGVkIiwidHlwZSI6IkxpdGVyYWwifV19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWN0aXZlT3JDb21wbGV0ZWRNZWRpY2F0aW9uU3RhdGVtZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb21wbGV0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJNZWRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkFjdGl2ZUNvbXBsZXRlZE9yU3RvcHBlZE1lZGljYXRpb25SZXF1ZXN0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJhY3RpdmUiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiTSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJjb21wbGV0ZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfSx7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6InN0b3BwZWQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJNZWRMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJNZWRpY2F0aW9uUmVxdWVzdExvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImF1dGhvcmVkT24iLCJzY29wZSI6Ik0iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJuYW1lIjoiTG9va0JhY2tJbnRlcnZhbCIsInR5cGUiOiJRdWVyeUxldFJlZiJ9XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTWVkaWNhdGlvblN0YXRlbWVudExvb2tCYWNrIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7Im5hbWUiOiJNZWRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJMb29rQmFja0ludGVydmFsIiwiZXhwcmVzc2lvbiI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJ0eXBlIjoiU3VidHJhY3QiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiTm93In0seyJuYW1lIjoiTG9va0JhY2siLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX0sImhpZ2giOnsidHlwZSI6Ik5vdyJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfSx7InR5cGUiOiJPdmVybGFwcyIsIm9wZXJhbmQiOlt7Im5hbWUiOiJQZXJpb2RUb0ludGVydmFsIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZWZmZWN0aXZlIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2siLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJFbmNvdW50ZXJzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkUiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkV4aXN0cyIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkVUIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidHlwZSIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJuYW1lIjoiRVQiLCJ0eXBlIjoiQWxpYXNSZWYifV19LHsibmFtZSI6IktvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9XX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJLb25jZXB0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJJblByb2dyZXNzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkUiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJFbmNMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN0YXR1cyIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJpbi1wcm9ncmVzcyIsInR5cGUiOiJMaXRlcmFsIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJFbmNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlc0J5Q29uY2VwdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJBIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZSIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInNjb3BlIjoiQSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiS29uY2VwdCIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJLb25jZXB0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJBY3RpdmVPckNvbmZpcm1lZEFsbGVyZ3lJbnRvbGVyYW5jZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJBIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiQWxsZXJneUludG9sTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6Ik9yIiwib3BlcmFuZCI6W3sidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJjbGluaWNhbFN0YXR1cyIsInNjb3BlIjoiQSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiQWxsZXJneUludG9sZXJhbmNlIEFjdGl2ZSIsInR5cGUiOiJDb25jZXB0UmVmIn1dfSx7InR5cGUiOiJFcXVpdmFsZW50Iiwib3BlcmFuZCI6W3sibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmVyaWZpY2F0aW9uU3RhdHVzIiwic2NvcGUiOiJBIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJBbGxlcmd5SW50b2xlcmFuY2UgQ29uZmlybWVkIiwidHlwZSI6IkNvbmNlcHRSZWYifV19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiQWxsZXJneUludG9sTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkdvYWxMb29rQmFjayIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJHIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiR29hbExpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJleHByZXNzaW9uIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InR5cGUiOiJTdWJ0cmFjdCIsIm9wZXJhbmQiOlt7InR5cGUiOiJOb3cifSx7Im5hbWUiOiJMb29rQmFjayIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSwiaGlnaCI6eyJ0eXBlIjoiTm93In19fSx7ImlkZW50aWZpZXIiOiJTdGFydERhdGUiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJzdGFydCIsInNjb3BlIjoiRyIsInR5cGUiOiJQcm9wZXJ0eSJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fX0seyJpZGVudGlmaWVyIjoiU3RhdHVzRGF0ZSIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXNEYXRlIiwic2NvcGUiOiJHIiwidHlwZSI6IlByb3BlcnR5In19fSx7ImlkZW50aWZpZXIiOiJUYXJnZXREYXRlcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlQiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ0YXJnZXQiLCJzY29wZSI6IkciLCJ0eXBlIjoiUHJvcGVydHkifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZHVlIiwic2NvcGUiOiJUIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19fX19LHsiaWRlbnRpZmllciI6IlRhcmdldFF1YW50aXRpZXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJUIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidGFyZ2V0Iiwic2NvcGUiOiJHIiwidHlwZSI6IlByb3BlcnR5In19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IlRvUXVhbnRpdHkiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0IjpmYWxzZSwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJwYXRoIjoiZHVlIiwic2NvcGUiOiJUIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RHVyYXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX19fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiT3IiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJ0eXBlIjoiVG9EYXRlVGltZSIsIm9wZXJhbmQiOnsibmFtZSI6IlN0YXJ0RGF0ZSIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfSx7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJUb0RhdGVUaW1lIiwib3BlcmFuZCI6eyJuYW1lIjoiU3RhdHVzRGF0ZSIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfV19LHsidHlwZSI6IkV4aXN0cyIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlREIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVGFyZ2V0RGF0ZXMiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJ0eXBlIjoiVG9EYXRlVGltZSIsIm9wZXJhbmQiOnsibmFtZSI6IlREIiwidHlwZSI6IkFsaWFzUmVmIn19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19fX1dfSx7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJUUSIsImV4cHJlc3Npb24iOnsibmFtZSI6IlRhcmdldFF1YW50aXRpZXMiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiSW4iLCJvcGVyYW5kIjpbeyJ0eXBlIjoiVG9EYXRlVGltZSIsIm9wZXJhbmQiOnsidHlwZSI6IkFkZCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJTdGFydERhdGUiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifSx7Im5hbWUiOiJUUSIsInR5cGUiOiJBbGlhc1JlZiJ9XX19LHsibmFtZSI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifV19fX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJHb2FsTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Hb2FsIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX0seyJuYW1lIjoiTG9va0JhY2siLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJJbW11bml6YXRpb25zQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkkiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1tdW5pemF0aW9uIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWNjaW5lQ29kZSIsInNjb3BlIjoiSSIsInR5cGUiOiJQcm9wZXJ0eSJ9XX0seyJuYW1lIjoiS29uY2VwdCIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJLb25jZXB0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJDb21wbGV0ZWRJbW11bml6YXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiSSIsImV4cHJlc3Npb24iOnsibmFtZSI6IkltbXVuaXphdGlvbkxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJJIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImNvbXBsZXRlZCIsInR5cGUiOiJMaXRlcmFsIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJJbW11bml6YXRpb25MaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiSW1tdW5pemF0aW9uTG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiSSIsImV4cHJlc3Npb24iOnsibmFtZSI6IkltbXVuaXphdGlvbkxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJleHByZXNzaW9uIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InR5cGUiOiJTdWJ0cmFjdCIsIm9wZXJhbmQiOlt7InR5cGUiOiJOb3cifSx7Im5hbWUiOiJMb29rQmFjayIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSwiaGlnaCI6eyJ0eXBlIjoiTm93In19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJvY2N1cnJlbmNlIiwic2NvcGUiOiJJIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFja0ludGVydmFsIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJJbW11bml6YXRpb25MaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LHsibmFtZSI6Ikxvb2tCYWNrIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiTW9zdFJlY2VudEltbXVuaXphdGlvbiIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMYXN0Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJJIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiSW1tdW5pemF0aW9uTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwic29ydCI6eyJieSI6W3siZGlyZWN0aW9uIjoiYXNjIiwidHlwZSI6IkJ5RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsibmFtZSI6Im9jY3VycmVuY2UiLCJ0eXBlIjoiSWRlbnRpZmllclJlZiJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6IkltbXVuaXphdGlvbkxpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1tdW5pemF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJEZXZpY2VzQnlDb25jZXB0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkQiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWl2YWxlbnQiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVG9Db25jZXB0IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ0eXBlIiwic2NvcGUiOiJEIiwidHlwZSI6IlByb3BlcnR5In1dfSx7Im5hbWUiOiJLb25jZXB0IiwidHlwZSI6Ik9wZXJhbmRSZWYifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IktvbmNlcHQiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkFjdGl2ZURldmljZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJEIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiRGV2aWNlTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzdGF0dXMiLCJzY29wZSI6IkQiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiYWN0aXZlIiwidHlwZSI6IkxpdGVyYWwifV19fSwib3BlcmFuZCI6W3sibmFtZSI6IkRldmljZUxpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwKICAgICAgICAgInZlcnNpb24iIDogIjEuMC4yIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImluY2x1ZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAicGF0aCIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiQUlWRVJTVEFUVVMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vYWxsZXJneWludG9sZXJhbmNlLXZlcmlmaWNhdGlvbiIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBSUNMSU5TVEFUVVMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vYWxsZXJneWludG9sZXJhbmNlLWNsaW5pY2FsIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNPTkRWRVJTVEFUVVMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLXZlci1zdGF0dXMiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ09ORENMSU5TVEFUVVMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNsaW5pY2FsIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiQWxsZXJneUludG9sZXJhbmNlIENvbmZpcm1lZCBjb2RlIiwKICAgICAgICAgICAgImlkIiA6ICJjb25maXJtZWQiLAogICAgICAgICAgICAiZGlzcGxheSIgOiAiQ29uZmlybWVkIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJBSVZFUlNUQVRVUyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIGNvZGUiLAogICAgICAgICAgICAiaWQiIDogImFjdGl2ZSIsCiAgICAgICAgICAgICJkaXNwbGF5IiA6ICJBY3RpdmUiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkFJQ0xJTlNUQVRVUyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gQ29uZmlybWVkIGNvZGUiLAogICAgICAgICAgICAiaWQiIDogImNvbmZpcm1lZCIsCiAgICAgICAgICAgICJkaXNwbGF5IiA6ICJDb25maXJtZWQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPTkRWRVJTVEFUVVMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ29uZGl0aW9uIEFjdGl2ZSBjb2RlIiwKICAgICAgICAgICAgImlkIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAiZGlzcGxheSIgOiAiQWN0aXZlIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJDT05EQ0xJTlNUQVRVUyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gUmVjdXJyZW5jZSBjb2RlIiwKICAgICAgICAgICAgImlkIiA6ICJyZWN1cnJlbmNlIiwKICAgICAgICAgICAgImRpc3BsYXkiIDogIlJlY3VycmVuY2UiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPTkRDTElOU1RBVFVTIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRpdGlvbiBSZWxhcHNlIGNvZGUiLAogICAgICAgICAgICAiaWQiIDogInJlbGFwc2UiLAogICAgICAgICAgICAiZGlzcGxheSIgOiAiUmVsYXBzZSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiQ09ORENMSU5TVEFUVVMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJjb25jZXB0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5SW50b2xlcmFuY2UgQ29uZmlybWVkIiwKICAgICAgICAgICAgImRpc3BsYXkiIDogIkNvbmZpcm1lZCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGUiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5SW50b2xlcmFuY2UgQ29uZmlybWVkIGNvZGUiCiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIiwKICAgICAgICAgICAgImRpc3BsYXkiIDogIkFjdGl2ZSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGUiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5SW50b2xlcmFuY2UgQWN0aXZlIGNvZGUiCiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gQ29uZmlybWVkIiwKICAgICAgICAgICAgImRpc3BsYXkiIDogIkNvbmZpcm1lZCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGUiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gQ29uZmlybWVkIGNvZGUiCiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gQWN0aXZlIiwKICAgICAgICAgICAgImRpc3BsYXkiIDogIkFjdGl2ZSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGUiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gQWN0aXZlIGNvZGUiCiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gUmVjdXJyZW5jZSIsCiAgICAgICAgICAgICJkaXNwbGF5IiA6ICJSZWN1cnJlbmNlIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZSIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRpdGlvbiBSZWN1cnJlbmNlIGNvZGUiCiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gUmVsYXBzZSIsCiAgICAgICAgICAgICJkaXNwbGF5IiA6ICJSZWxhcHNlIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZSIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRpdGlvbiBSZWxhcHNlIGNvZGUiCiAgICAgICAgICAgIH0gXQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInN0YXRlbWVudHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGVyaW9kVG9JbnRlcnZhbCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJwZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAicG9pbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAibG93Q2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICJoaWdoQ2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICJsb3ciIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJwZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJoaWdoIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAicGVyaW9kIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJhbmdlVG9JbnRlcnZhbCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJyYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkludGVydmFsVHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICJwb2ludFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJsb3dDbG9zZWQiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgImhpZ2hDbG9zZWQiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkludGVydmFsIiwKICAgICAgICAgICAgICAgICAgImxvdyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1F1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJyYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAiaGlnaCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1F1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaGlnaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAicmFuZ2UiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmFuZ2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPYnNlcnZhdGlvbnNCeUNvbmNlcHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk8iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJLb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJWZXJpZmllZCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZmluYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiY29ycmVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImFtZW5kZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk8iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPYnNMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInVuaXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJVbml0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJVbml0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAibmFtZSIgOiAiVW5pdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9ic2VydmF0aW9uTG9va0JhY2siLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk8iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPYnNMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAibGV0IiA6IFsgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImxvd0Nsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAiaGlnaENsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAibG93IiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlN1YnRyYWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAiaGlnaCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3IiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImVmZmVjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImVmZmVjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3ZlcmxhcHMiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlBlcmlvZFRvSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZWZmZWN0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMYXN0IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTyIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAic29ydCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJieSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGlvbiIgOiAiYXNjIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkJ5RXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJlZmZlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJlZmZlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiZWZmZWN0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklkZW50aWZpZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImVmZmVjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZGVudGlmaWVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUXVhbnRpdHlWYWx1ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1F1YW50aXR5IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ29uY2VwdFZhbHVlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9icyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJPYnMiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJGaW5kRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2FsZXNjZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZWZmZWN0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPYnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImVmZmVjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZWZmZWN0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPYnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlZmZlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9icyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT2JzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJPYnMiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJIaWdoZXN0T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTWF4IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTyIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRpdGlvbnNCeUNvbmNlcHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVpdmFsZW50IiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIktvbmNlcHQiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ29uZmlybWVkIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZExpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1aXZhbGVudCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmVyaWZpY2F0aW9uU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZGl0aW9uIENvbmZpcm1lZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jZXB0UmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWN0aXZlQ29uZGl0aW9uIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZExpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQW5kIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVpdmFsZW50IiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjbGluaWNhbFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRpdGlvbiBBY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2VwdFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImFiYXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWN0aXZlT3JSZWN1cnJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3IiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNsaW5pY2FsU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZGl0aW9uIEFjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jZXB0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1aXZhbGVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY2xpbmljYWxTdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb24gUmVjdXJyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jZXB0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNsaW5pY2FsU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZGl0aW9uIFJlbGFwc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2VwdFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb25Mb29rQmFjayIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiQyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAibGV0IiA6IFsgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImxvd0Nsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAiaGlnaENsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAibG93IiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlN1YnRyYWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAiaGlnaCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3IiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAib25zZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk92ZXJsYXBzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQZXJpb2RUb0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm9uc2V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWNvcmRlZERhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50Q29uZGl0aW9uIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkxhc3QiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZExpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAic29ydCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJieSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGlvbiIgOiAiYXNjIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkJ5RXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJvbnNldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZGVudGlmaWVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAib25zZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAib25zZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicmVjb3JkZWREYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklkZW50aWZpZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJvY2VkdXJlc0J5Q29uY2VwdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIlAiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJLb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDb21wbGV0ZWQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIlAiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJjb21wbGV0ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlByb2NlZHVyZUluUHJvZ3Jlc3MiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIlAiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJpbi1wcm9ncmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlByb2NMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJvY2VkdXJlUGVyZm9ybWFuY2UiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIlAiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJwcmVwYXJhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJub3QtZG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJlbnRlcmVkLWluLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogInVua25vd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlByb2NlZHVyZUxvb2tCYWNrIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJQIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUHJvY0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJsZXQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibG93Q2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICJoaWdoQ2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICJsb3ciIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU3VidHJhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJoaWdoIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmZvcm1lZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3ZlcmxhcHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlBlcmlvZFRvSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlByb2NMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudFByb2NlZHVyZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMYXN0IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlByb2NMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgInNvcnQiIDogewogICAgICAgICAgICAgICAgICAgICAiYnkiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3Rpb24iIDogImFzYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJCeUV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2FsZXNjZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicGVyZm9ybWVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklkZW50aWZpZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJwZXJmb3JtZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicGVyZm9ybWVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklkZW50aWZpZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlByb2NMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU2VydmljZVJlcXVlc3RBY3RpdmVPckNvbXBsZXRlZCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiUyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlNlcnZpY2VSZXF1ZXN0TGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiY29tcGxldGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlNlcnZpY2VSZXF1ZXN0TGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TZXJ2aWNlUmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU2VydmljZVJlcXVlc3RMb29rQmFjayIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiUyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlNlcnZpY2VSZXF1ZXN0TGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImF1dGhvcmVkT24iLAogICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIlMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibG93Q2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICJoaWdoQ2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICJsb3ciIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU3VidHJhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJoaWdoIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlNlcnZpY2VSZXF1ZXN0TGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TZXJ2aWNlUmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkaWNhdGlvblN0YXRlbWVudHNCeUNvbmNlcHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk0iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1aXZhbGVudCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJtZWRpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIktvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJLb25jZXB0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1lZGljYXRpb25SZXF1ZXN0c0J5Q29uY2VwdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1aXZhbGVudCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJtZWRpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIktvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJLb25jZXB0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFjdGl2ZU1lZGljYXRpb25TdGF0ZW1lbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk0iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAibGV0IiA6IFsgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiRWZmZWN0aXZlUGVyaW9kIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUGVyaW9kVG9JbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlZmZlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQW5kIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJFZmZlY3RpdmVQZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBZnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRWZmZWN0aXZlUGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWN0aXZlTWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk0iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImFjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFjdGl2ZU9yQ29tcGxldGVkTWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk0iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImNvbXBsZXRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBY3RpdmVPckNvbXBsZXRlZE1lZGljYXRpb25TdGF0ZW1lbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk0iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImNvbXBsZXRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFjdGl2ZUNvbXBsZXRlZE9yU3RvcHBlZE1lZGljYXRpb25SZXF1ZXN0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3IiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImFjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiY29tcGxldGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAic3RvcHBlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2F0aW9uUmVxdWVzdExvb2tCYWNrIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJsb3dDbG9zZWQiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgImhpZ2hDbG9zZWQiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgImxvdyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTdWJ0cmFjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm93IgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgImhpZ2giIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm93IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiYXV0aG9yZWRPbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2siLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1lZGljYXRpb25TdGF0ZW1lbnRMb29rQmFjayIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJsZXQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibG93Q2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICJoaWdoQ2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICJsb3ciIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU3VidHJhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJoaWdoIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdyIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImVmZmVjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3ZlcmxhcHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlBlcmlvZFRvSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZWZmZWN0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRW5jb3VudGVyc0J5Q29uY2VwdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiRSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJFVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkVUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJLb25jZXB0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkluUHJvZ3Jlc3MiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkUiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJFbmNMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJFIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImluLXByb2dyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiRW5jTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFsbGVyZ3lJbnRvbGVyYW5jZXNCeUNvbmNlcHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkEiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWxsZXJneUludG9sZXJhbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVpdmFsZW50IiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIktvbmNlcHQiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWN0aXZlT3JDb25maXJtZWRBbGxlcmd5SW50b2xlcmFuY2UiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkEiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBbGxlcmd5SW50b2xMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVpdmFsZW50IiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjbGluaWNhbFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFsbGVyZ3lJbnRvbGVyYW5jZSBBY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2VwdFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZlcmlmaWNhdGlvblN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFsbGVyZ3lJbnRvbGVyYW5jZSBDb25maXJtZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2VwdFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiQWxsZXJneUludG9sTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdvYWxMb29rQmFjayIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiRyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdvYWxMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAibGV0IiA6IFsgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImxvd0Nsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAiaGlnaENsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAibG93IiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlN1YnRyYWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAiaGlnaCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJTdGFydERhdGUiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiRyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiU3RhdHVzRGF0ZSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGF0dXNEYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJHIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiVGFyZ2V0RGF0ZXMiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInRhcmdldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiRyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiVGFyZ2V0UXVhbnRpdGllcyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidGFyZ2V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJHIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1F1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJkdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RHVyYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3IiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvRGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJTdGFydERhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0RhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiU3RhdHVzRGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJURCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRhcmdldERhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlREIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJUUSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRhcmdldFF1YW50aXRpZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0RhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWRkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJTdGFydERhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRRIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFja0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiR29hbExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R29hbCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiSW1tdW5pemF0aW9uc0J5Q29uY2VwdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiSSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1JbW11bml6YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhY2NpbmVDb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJJIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIktvbmNlcHQiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ29tcGxldGVkSW1tdW5pemF0aW9uIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJJIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiSW1tdW5pemF0aW9uTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJjb21wbGV0ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJJbW11bml6YXRpb25MaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiSW1tdW5pemF0aW9uTG9va0JhY2siLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkkiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJJbW11bml6YXRpb25MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAibGV0IiA6IFsgewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImxvd0Nsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAiaGlnaENsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAgICAibG93IiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlN1YnRyYWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxvb2tCYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAiaGlnaCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3ciCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW4iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm9jY3VycmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJJbW11bml6YXRpb25MaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudEltbXVuaXphdGlvbiIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMYXN0IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiSSIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkltbXVuaXphdGlvbkxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAic29ydCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJieSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGlvbiIgOiAiYXNjIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkJ5RXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIm9jY3VycmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSWRlbnRpZmllclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJJbW11bml6YXRpb25MaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRGV2aWNlc0J5Q29uY2VwdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiRCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWl2YWxlbnQiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJLb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiS29uY2VwdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBY3RpdmVEZXZpY2UiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkQiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJEZXZpY2VMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJEIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImFjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkRldmljZUxpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9IF0KICAgICAgfQogICB9Cn0=" } ] - } \ No newline at end of file + } diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json index 998d9ec3..38c1fa31 100644 --- a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-DTRHelpers.json @@ -26,7 +26,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiRFRSSGVscGVycyIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjQsInN0YXJ0Q2hhciI6MSwiZW5kTGluZSI6NCwiZW5kQ2hhciI6NjcsIm1lc3NhZ2UiOiJDb3VsZCBub3QgbG9hZCBzb3VyY2UgZm9yIGxpYnJhcnkgQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAuIiwiZXJyb3JUeXBlIjoiaW5jbHVkZSIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInRhcmdldEluY2x1ZGVMaWJyYXJ5SWQiOiJDRFNfQ29ubmVjdF9Db21tb25zX2Zvcl9GSElSdjQwMCIsInRhcmdldEluY2x1ZGVMaWJyYXJ5VmVyc2lvbklkIjoiMS4wLjIiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiRFRSSGVscGVycyIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjU2LCJzdGFydENoYXIiOjEwLCJlbmRMaW5lIjo1NiwiZW5kQ2hhciI6MTIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIENEUyBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifV0sImlkZW50aWZpZXIiOnsiaWQiOiJEVFJIZWxwZXJzIiwidmVyc2lvbiI6IjAuMS4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sImluY2x1ZGVzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiRkhJUkhlbHBlcnMiLCJwYXRoIjoiRkhJUkhlbHBlcnMiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IkNvZGVzRnJvbUNvbmRpdGlvbnMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRGlzdGluY3QiLCJvcGVyYW5kIjp7InR5cGUiOiJGbGF0dGVuIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkNvbmRMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJEaWFnbm9zZXNDb2RpbmdzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQ09ESU5HIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJDIiwidHlwZSI6IlByb3BlcnR5In19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJJbiIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJDT0RJTkciLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAiLCJ0eXBlIjoiTGl0ZXJhbCJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbSIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsInR5cGUiOiJMaXRlcmFsIn1dfV19LCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IkRpYWdub3Nlc0NvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJDb25kTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkZpcnN0RGF0ZUNvbmRpdGlvblJlY29yZGVkIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkZpcnN0Iiwic291cmNlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDIiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiQ29uZGl0aW9uTGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwicmVsYXRpb25zaGlwIjpbXSwic29ydCI6eyJieSI6W3siZGlyZWN0aW9uIjoiYXNjIiwidHlwZSI6IkJ5RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iOnsibmFtZSI6IlRvRGF0ZVRpbWUiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6InJlY29yZGVkRGF0ZSIsInR5cGUiOiJJZGVudGlmaWVyUmVmIn1dfX1dfX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiQ29uZGl0aW9uTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6Ikxvd2VzdE9ic2VydmF0aW9uIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik1pbiIsInNvdXJjZSI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTyIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik9ic0xpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJUb1F1YW50aXR5IiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InN0cmljdCI6ZmFsc2UsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwic2NvcGUiOiJPIiwidHlwZSI6IlByb3BlcnR5In0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnNMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJOdWxsU2FmZVRvUXVhbnRpdHlXaXRob3V0VW5pdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoiUXR5IiwidHlwZSI6Ik9wZXJhbmRSZWYifX19LCJ0aGVuIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlF0eSIsInR5cGUiOiJPcGVyYW5kUmVmIn19fSwiZWxzZSI6eyJhc1R5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURlY2ltYWwiLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fSwib3BlcmFuZCI6W3sibmFtZSI6IlF0eSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJHZXRPYnNlcnZhdGlvblZhbHVlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik51bGxTYWZlVG9RdWFudGl0eVdpdGhvdXRVbml0IiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sic3RyaWN0Ijp0cnVlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT2JzIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sImFzVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJPYnMiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiRW5jb3VudGVyTG9va0JhY2siLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiRSIsImV4cHJlc3Npb24iOnsibmFtZSI6IkVuY291bnRlckxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6Ikxvb2tCYWNrSW50ZXJ2YWwiLCJleHByZXNzaW9uIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InR5cGUiOiJTdWJ0cmFjdCIsIm9wZXJhbmQiOlt7InR5cGUiOiJOb3cifSx7Im5hbWUiOiJMb29rQmFjayIsInR5cGUiOiJPcGVyYW5kUmVmIn1dfSwiaGlnaCI6eyJ0eXBlIjoiTm93In19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJOdWxsIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoiRW5jb3VudGVyTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSx7Im5hbWUiOiJMb29rQmFjayIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IkNvbnZlcnRFbmNvdW50ZXJEZXRhaWxzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkUiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJFbmNvdW50ZXJMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJFbmNvdW50ZXJDb2RpbmdzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQ09ESU5HIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidHlwZSIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImNvZGluZyIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsidHlwZSI6IlR1cGxlIiwiZWxlbWVudCI6W3sibmFtZSI6ImNvZGUiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX0seyJuYW1lIjoic3lzdGVtIiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX0seyJuYW1lIjoiZGlzcGxheSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiZGlzcGxheSIsInNjb3BlIjoiQ09ESU5HIiwidHlwZSI6IlByb3BlcnR5In19fSx7Im5hbWUiOiJwZXJpb2RTdGFydCIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmlvZCIsInNjb3BlIjoiRSIsInR5cGUiOiJQcm9wZXJ0eSJ9fX19LHsibmFtZSI6ImVuY291bnRlclJlYXNvbiIsInZhbHVlIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InJlYXNvbkNvZGUiLCJzY29wZSI6IkUiLCJ0eXBlIjoiUHJvcGVydHkifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsInZhbHVlIjoiMCIsInR5cGUiOiJMaXRlcmFsIn1dfX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6ImRpc3BsYXkiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6ImRpc3BsYXkiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX0seyJuYW1lIjoidHlwZSIsInZhbHVlIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJlbmNvdW50ZXIiLCJ0eXBlIjoiTGl0ZXJhbCJ9fV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6IkVuY291bnRlckNvZGluZ3MiLCJ0eXBlIjoiUXVlcnlMZXRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJFbmNvdW50ZXJMaXN0Iiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsidHlwZSI6Ikxpc3RUeXBlU3BlY2lmaWVyIiwiZWxlbWVudFR5cGUiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuY291bnRlciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19XX0seyJuYW1lIjoiUHJvY2VkdXJlQ29kaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IkRpc3RpbmN0Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRmxhdHRlbiIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlAiLCJleHByZXNzaW9uIjp7Im5hbWUiOiJQcm9jZWR1cmVMaXN0IiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dLCJsZXQiOlt7ImlkZW50aWZpZXIiOiJEaWFnbm9zZXNDb2RpbmdzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiQ09ESU5HIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kaW5nIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJQIiwidHlwZSI6IlByb3BlcnR5In19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7InR5cGUiOiJUdXBsZSIsImVsZW1lbnQiOlt7Im5hbWUiOiJjb2RlIiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJjb2RlIiwic2NvcGUiOiJDT0RJTkciLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6InN5c3RlbSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwic2NvcGUiOiJDT0RJTkciLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6ImRpc3BsYXkiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImRpc3BsYXkiLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dfX19fV0sInJlbGF0aW9uc2hpcCI6W10sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJEaWFnbm9zZXNDb2RpbmdzIiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn19fX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiUHJvY2VkdXJlTGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9jZWR1cmUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fV19LHsibmFtZSI6IkNvZGVzRnJvbVByb2NlZHVyZXMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRGlzdGluY3QiLCJvcGVyYW5kIjp7InR5cGUiOiJGbGF0dGVuIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiUCIsImV4cHJlc3Npb24iOnsibmFtZSI6IlByb2NlZHVyZUxpc3QiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fV0sImxldCI6W3siaWRlbnRpZmllciI6IkRpYWdub3Nlc0NvZGluZ3MiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDT0RJTkciLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJzY29wZSI6IlAiLCJ0eXBlIjoiUHJvcGVydHkifX19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkluIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJzeXN0ZW0iLCJzY29wZSI6IkNPRElORyIsInR5cGUiOiJQcm9wZXJ0eSJ9fSx7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMCIsInR5cGUiOiJMaXRlcmFsIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwidHlwZSI6IkxpdGVyYWwifSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwidHlwZSI6IkxpdGVyYWwifV19XX0sInJldHVybiI6eyJleHByZXNzaW9uIjp7Im5hbWUiOiJUb0NvZGUiLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6IkNPRElORyIsInR5cGUiOiJBbGlhc1JlZiJ9XX19fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiRGlhZ25vc2VzQ29kaW5ncyIsInR5cGUiOiJRdWVyeUxldFJlZiJ9fX19fSwib3BlcmFuZCI6W3sibmFtZSI6IlByb2NlZHVyZUxpc3QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJ0eXBlIjoiTGlzdFR5cGVTcGVjaWZpZXIiLCJlbGVtZW50VHlwZSI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvY2VkdXJlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIkRUUkhlbHBlcnMiLAogICAgICAgICAidmVyc2lvbiIgOiAiMC4xLjAiCiAgICAgIH0sCiAgICAgICJzY2hlbWFJZGVudGlmaWVyIiA6IHsKICAgICAgICAgImlkIiA6ICJ1cm46aGw3LW9yZzplbG0iLAogICAgICAgICAidmVyc2lvbiIgOiAicjEiCiAgICAgIH0sCiAgICAgICJ1c2luZ3MiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJTeXN0ZW0iLAogICAgICAgICAgICAidXJpIiA6ICJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUiIsCiAgICAgICAgICAgICJ1cmkiIDogImh0dHA6Ly9obDcub3JnL2ZoaXIiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiaW5jbHVkZXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICJwYXRoIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJDRFMiLAogICAgICAgICAgICAicGF0aCIgOiAiQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiMS4wLjIiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29udGV4dHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJzdGF0ZW1lbnRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNvZGVzRnJvbUNvbmRpdGlvbnMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIkRpYWdub3Nlc0NvZGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJEaWFnbm9zZXNDb2RpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJGaXJzdERhdGVDb25kaXRpb25SZWNvcmRlZCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGaXJzdCIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb25MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgInNvcnQiIDogewogICAgICAgICAgICAgICAgICAgICAiYnkiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3Rpb24iIDogImFzYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJCeUV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0RhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicmVjb3JkZWREYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklkZW50aWZpZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb25kaXRpb25MaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTG93ZXN0T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTWluIiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTyIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk9ic0xpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk51bGxTYWZlVG9RdWFudGl0eVdpdGhvdXRVbml0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlF0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlF0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURlY2ltYWwiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJRdHkiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk51bGxTYWZlVG9RdWFudGl0eVdpdGhvdXRVbml0IiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9icyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk9icyIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkVuY291bnRlckxvb2tCYWNrIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJFIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRW5jb3VudGVyTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIkxvb2tCYWNrSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJsb3dDbG9zZWQiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgImhpZ2hDbG9zZWQiIDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgImxvdyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTdWJ0cmFjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm93IgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMb29rQmFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgImhpZ2giIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm93IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9yIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk92ZXJsYXBzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQZXJpb2RUb0ludGVydmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2tJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiRW5jb3VudGVyTGlzdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0VHlwZVNwZWNpZmllciIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAibmFtZSIgOiAiTG9va0JhY2siLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNvbnZlcnRFbmNvdW50ZXJEZXRhaWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkRpc3RpbmN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRmxhdHRlbiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJFIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRW5jb3VudGVyTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIkVuY291bnRlckNvZGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRmxhdHRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUdXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzeXN0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInBlcmlvZFN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyaW9kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJlbmNvdW50ZXJSZWFzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWFzb25Db2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ0eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImVuY291bnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRW5jb3VudGVyQ29kaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkVuY291bnRlckxpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jZWR1cmVDb2RpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIlAiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jZWR1cmVMaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAibGV0IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiRGlhZ25vc2VzQ29kaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIlAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVHVwbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkRpYWdub3Nlc0NvZGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcm9jZWR1cmVMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByb2NlZHVyZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ29kZXNGcm9tUHJvY2VkdXJlcyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJEaXN0aW5jdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZsYXR0ZW4iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlByb2NlZHVyZUxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJsZXQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJEaWFnbm9zZXNDb2RpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImh0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRGlhZ25vc2VzQ29kaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlByb2NlZHVyZUxpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvY2VkdXJlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9IF0KICAgICAgfQogICB9Cn0=" } ] - } \ No newline at end of file + } diff --git a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json index 6bea7b78..f8ab5fc4 100644 --- a/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json +++ b/src/cds-library/CRD-DTR/Shared/R4/resources/Library-R4-FHIRHelpers-4.0.0.json @@ -19,7 +19,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkZISVJIZWxwZXJzIiwidmVyc2lvbiI6IjQuMC4wIn0sInNjaGVtYUlkZW50aWZpZXIiOnsiaWQiOiJ1cm46aGw3LW9yZzplbG0iLCJ2ZXJzaW9uIjoicjEifSwidXNpbmdzIjp7ImRlZiI6W3sibG9jYWxJZGVudGlmaWVyIjoiU3lzdGVtIiwidXJpIjoidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIn0seyJsb2NhbElkZW50aWZpZXIiOiJGSElSIiwidXJpIjoiaHR0cDovL2hsNy5vcmcvZmhpciIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInN0YXRlbWVudHMiOnsiZGVmIjpbeyJuYW1lIjoiVG9JbnRlcnZhbCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9LCJhc1R5cGVTcGVjaWZpZXIiOnsidHlwZSI6IkludGVydmFsVHlwZVNwZWNpZmllciIsInBvaW50VHlwZSI6eyJuYW1lIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX19LCJlbHNlIjp7Imxvd0Nsb3NlZCI6dHJ1ZSwiaGlnaENsb3NlZCI6dHJ1ZSwidHlwZSI6IkludGVydmFsIiwibG93Ijp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhcnQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InBlcmlvZCIsInR5cGUiOiJPcGVyYW5kUmVmIn19fSwiaGlnaCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVuZCIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoicGVyaW9kIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJwZXJpb2QiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGVyaW9kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvUXVhbnRpdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiSWYiLCJjb25kaXRpb24iOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsibmFtZSI6InF1YW50aXR5IiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsidHlwZSI6Ik51bGwifX0sImVsc2UiOnsiY2xhc3NUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsInR5cGUiOiJJbnN0YW5jZSIsImVsZW1lbnQiOlt7Im5hbWUiOiJ2YWx1ZSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InF1YW50aXR5IiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fSx7Im5hbWUiOiJ1bml0IiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ1bml0IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJxdWFudGl0eSIsInR5cGUiOiJPcGVyYW5kUmVmIn19fX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJxdWFudGl0eSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1RdWFudGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0ludGVydmFsIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7Im5hbWUiOiJyYW5nZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJ0aGVuIjp7InR5cGUiOiJBcyIsIm9wZXJhbmQiOnsidHlwZSI6Ik51bGwifSwiYXNUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJJbnRlcnZhbFR5cGVTcGVjaWZpZXIiLCJwb2ludFR5cGUiOnsibmFtZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9UXVhbnRpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19fSwiZWxzZSI6eyJsb3dDbG9zZWQiOnRydWUsImhpZ2hDbG9zZWQiOnRydWUsInR5cGUiOiJJbnRlcnZhbCIsImxvdyI6eyJuYW1lIjoiVG9RdWFudGl0eSIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJsb3ciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InJhbmdlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX1dfSwiaGlnaCI6eyJuYW1lIjoiVG9RdWFudGl0eSIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7InBhdGgiOiJoaWdoIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJyYW5nZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19XX19fSwib3BlcmFuZCI6W3sibmFtZSI6InJhbmdlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJhbmdlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvQ29kZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoiY29kaW5nIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sInRoZW4iOnsiYXNUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db2RlIiwidHlwZSI6IkFzIiwib3BlcmFuZCI6eyJ0eXBlIjoiTnVsbCJ9fSwiZWxzZSI6eyJjbGFzc1R5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvZGUiLCJ0eXBlIjoiSW5zdGFuY2UiLCJlbGVtZW50IjpbeyJuYW1lIjoiY29kZSIsInZhbHVlIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiY29kaW5nIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fSx7Im5hbWUiOiJzeXN0ZW0iLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiY29kaW5nIiwidHlwZSI6Ik9wZXJhbmRSZWYifX19fSx7Im5hbWUiOiJ2ZXJzaW9uIiwidmFsdWUiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJ2ZXJzaW9uIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJjb2RpbmciLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX19LHsibmFtZSI6ImRpc3BsYXkiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImRpc3BsYXkiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImNvZGluZyIsInR5cGUiOiJPcGVyYW5kUmVmIn19fX1dfX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJjb2RpbmciLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kaW5nIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvQ29uY2VwdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InR5cGUiOiJJZiIsImNvbmRpdGlvbiI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJuYW1lIjoiY29uY2VwdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJ0aGVuIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsInR5cGUiOiJBcyIsIm9wZXJhbmQiOnsidHlwZSI6Ik51bGwifX0sImVsc2UiOnsiY2xhc3NUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwidHlwZSI6Ikluc3RhbmNlIiwiZWxlbWVudCI6W3sibmFtZSI6ImNvZGVzIiwidmFsdWUiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IkMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImNvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJuYW1lIjoiVG9Db2RlIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6IkMiLCJ0eXBlIjoiQWxpYXNSZWYifV19fX19LHsibmFtZSI6ImRpc3BsYXkiLCJ2YWx1ZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6ImNvbmNlcHQiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fX19XX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiY29uY2VwdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlYWJsZUNvbmNlcHQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn11dWlkIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VGVzdFNjcmlwdFJlcXVlc3RNZXRob2RDb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U29ydERpcmVjdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUJpb2xvZ2ljYWxseURlcml2ZWRQcm9kdWN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VW5pdHNPZlRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BZGRyZXNzVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZUNhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SXNzdWVTZXZlcml0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVUZWFtU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3RydWN0dXJlRGVmaW5pdGlvbktpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QdWJsaWNhdGlvblN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUZISVJWZXJzaW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FyZVBsYW5BY3Rpdml0eUtpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBTb3VyY2VMaXN0TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJlcXVlc3RTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zdHJhbmRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVlc3Rpb25uYWlyZVJlc3BvbnNlU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VhcmNoQ29tcGFyYXRvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNoYXJnZUl0ZW1TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25QYXJ0aWNpcGFudFR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2VUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FyZVBsYW5BY3Rpdml0eVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUludm9pY2VTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1DbGFpbVByb2Nlc3NpbmdDb2RlcyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVJlcXVlc3RSZXNvdXJjZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXJ0aWNpcGF0aW9uU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTmFtZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Eb2N1bWVudE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Bc3NlcnRpb25PcGVyYXRvclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EYXlzT2ZXZWVrIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SXNzdWVUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Y2Fub25pY2FsIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3RydWN0dXJlTWFwQ29udGV4dFR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GYW1pbHlIaXN0b3J5U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXh0ZW5zaW9uQ29udGV4dFR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Bc3NlcnRpb25SZXNwb25zZVR5cGVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVxdWVzdEludGVudCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXN0cmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvblJlcXVpcmVkQmVoYXZpb3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HcmFwaENvbXBhcnRtZW50VXNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9b3JpZW50YXRpb25UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWNjb3VudFN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUlkZW50aWZpZXJVc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBUYXJnZXRMaXN0TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUV4cG9zdXJlU3RhdGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0UGFydGljaXBhbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QmluZGluZ1N0cmVuZ3RoIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVxdWVzdFByaW9yaXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGFydGljaXBhbnRSZXF1aXJlZCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVhQYXRoVXNhZ2VUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9aWQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GaWx0ZXJPcGVyYXRvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU5hbWluZ1N5c3RlbVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db250cmFjdFJlc291cmNlU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaFN1YmplY3RTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBUcmFuc2Zvcm0iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNwb25zZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9EZWNpbWFsIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGVjaW1hbCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFnZ3JlZ2F0aW9uTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXNlcXVlbmNlVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN5c3RlbVJlc3RmdWxJbnRlcmFjdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFkdmVyc2VFdmVudEFjdHVhbGl0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN1YnNjcmlwdGlvbkNoYW5uZWxUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXNzZXJ0aW9uRGlyZWN0aW9uVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVQbGFuSW50ZW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWxsZXJneUludG9sZXJhbmNlQ3JpdGljYWxpdHkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9wZXJ0eVJlcHJlc2VudGF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VHJpZ2dlclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db21wb3NpdGlvblN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFwcG9pbnRtZW50U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVzc2FnZVNpZ25pZmljYW5jZUNhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TGlzdE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaEVsZW1lbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb25TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNvdXJjZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9Cb29sZWFuIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Ym9vbGVhbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZU1hcEdyb3VwVHlwZU1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdXBwbHlSZXF1ZXN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyTG9jYXRpb25TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb25hbERlbGV0ZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXVybCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXVyaSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVVzZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SWRlbnRpdHlBc3N1cmFuY2VMZXZlbCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZU1ldHJpY0NvbG9yIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvVGltZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb25hbFJlYWRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BbGxlcmd5SW50b2xlcmFuY2VTZXZlcml0eSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUZpbmFuY2lhbFJlc291cmNlU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PcGVyYXRpb25LaW5kIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3Vic2NyaXB0aW9uU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R29hbExpZmVjeWNsZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uRGF0YVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Eb2N1bWVudFJlZmVyZW5jZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXJlcG9zaXRvcnlUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TG9jYXRpb25TdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Ob3RlVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVRlc3RSZXBvcnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlU3lzdGVtQ29udGVudE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GSElSRGV2aWNlU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29udGFjdFBvaW50U3lzdGVtIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2xvdFN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVByb3BlcnR5VHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVR5cGVEZXJpdmF0aW9uUnVsZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUd1aWRhbmNlUmVzcG9uc2VTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZWxhdGVkQXJ0aWZhY3RUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9b2lkIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29tcGFydG1lbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3RJbnRlbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1JbnZvaWNlUHJpY2VDb21wb25lbnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2FsaWJyYXRpb25TdGF0ZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUdyb3VwVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVuYWJsZVdoZW5CZWhhdmlvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVRhc2tJbnRlbnQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1JbW11bml6YXRpb25FdmFsdWF0aW9uU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeGFtcGxlU2NlbmFyaW9BY3RvclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm92ZW5hbmNlRW50aXR5Um9sZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNwZWNpbWVuU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzdGZ1bENhcGFiaWxpdHlNb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV0ZWN0ZWRJc3N1ZVNldmVyaXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmlzaW9uRXllcyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnNlbnREYXRhTWVhbmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfW1lc3NhZ2VoZWFkZXJSZXNwb25zZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HdWlkZVBhZ2VHZW5lcmF0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RG9jdW1lbnRSZWxhdGlvbnNoaXBUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmFyaWFibGVUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VGVzdFJlcG9ydFJlc3VsdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmNlcHRNYXBHcm91cFVubWFwcGVkTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0RhdGVUaW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9aW5zdGFudCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0RhdGVUaW1lIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZVRpbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9EYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGF0ZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0ludGVnZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1wb3NpdGl2ZUludCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNsaW5pY2FsSW1wcmVzc2lvblN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVsaWdpYmlsaXR5UmVzcG9uc2VQdXJwb3NlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFycmF0aXZlU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1hZ2luZ1N0dWR5U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5kcG9pbnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1CaW9sb2dpY2FsbHlEZXJpdmVkUHJvZHVjdENhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzb3VyY2VWZXJzaW9uUG9saWN5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uQ2FyZGluYWxpdHlCZWhhdmlvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUdyb3VwTWVhc3VyZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU5hbWluZ1N5c3RlbUlkZW50aWZpZXJUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW1tdW5pemF0aW9uU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdHVzQ29kZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EaXNjcmltaW5hdG9yVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZU1hcElucHV0TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUxpbmthZ2VUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVmZXJlbmNlSGFuZGxpbmdQb2xpY3kiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaFN0dWR5U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXVkaXRFdmVudE91dGNvbWUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TcGVjaW1lbkNvbnRhaW5lZFByZWZlcmVuY2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25SZWxhdGlvbnNoaXBUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uc3RyYWludFNldmVyaXR5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZlbnRDYXBhYmlsaXR5TW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVTZWFyY2hTdXBwb3J0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb25SYW5nZUNhdGVnb3J5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VURJRW50cnlUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2F0ZWdvcnkiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0QWN0aW9uUmVzdWx0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FwYWJpbGl0eVN0YXRlbWVudEtpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FdmVudFRpbWluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNlYXJjaFBhcmFtVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvbkdyb3VwaW5nQmVoYXZpb3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBNb2RlbE1vZGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UYXNrU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QmlvbG9naWNhbGx5RGVyaXZlZFByb2R1Y3RTdG9yYWdlU2NhbGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HcmFwaENvbXBhcnRtZW50UnVsZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNsaWNpbmdSdWxlcyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUV4cGxhbmF0aW9uT2ZCZW5lZml0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R3VpZGVQYXJhbWV0ZXJDb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2F0YWxvZ0VudHJ5UmVsYXRpb25UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TGlua1R5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25jZXB0TWFwRXF1aXZhbGVuY2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BdWRpdEV2ZW50QWN0aW9uIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VhcmNoTW9kaWZpZXJDb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZlbnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PcGVyYXRpb25QYXJhbWV0ZXJVc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25zZW50UHJvdmlzaW9uVHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvbkNvbmRpdGlvbktpbmQiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1xdWFsaXR5VHlwZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUFkbWluaXN0cmF0aXZlR2VuZGVyIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVlc3Rpb25uYWlyZUl0ZW1UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2FsaWJyYXRpb25UeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZpZGVuY2VWYXJpYWJsZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1jb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uU2VsZWN0aW9uQmVoYXZpb3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdXBwbHlEZWxpdmVyeVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURpYWdub3N0aWNSZXBvcnRTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GbGFnU3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U1BEWExpY2Vuc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1MaXN0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9YmFzZTY0QmluYXJ5IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlVXNlU3RhdGVtZW50U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXVkaXRFdmVudEFnZW50TmV0d29ya1R5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeHByZXNzaW9uTGFuZ3VhZ2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BZGRyZXNzVXNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29udGFjdFBvaW50VXNlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljT3BlcmF0aW9uYWxTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db250cmlidXRvclR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZWZlcmVuY2VWZXJzaW9uUnVsZXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWFzdXJlUmVwb3J0U3RhdHVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VhcmNoRW50cnlNb2RlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvSW50ZWdlciIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXVuc2lnbmVkSW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFtZVVzZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUxvY2F0aW9uTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb0ludGVnZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1pbnRlZ2VyIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RkhJUlN1YnN0YW5jZVN0YXR1cyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVF1ZXN0aW9ubmFpcmVJdGVtT3BlcmF0b3IiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1IVFRQVmVyYiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUVwaXNvZGVPZkNhcmVTdGF0dXMiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZW1pdHRhbmNlT3V0Y29tZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfW1hcmtkb3duIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RWxpZ2liaWxpdHlSZXF1ZXN0UHVycG9zZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVF1YW50aXR5Q29tcGFyYXRvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lYXN1cmVSZXBvcnRUeXBlIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uUHJlY2hlY2tCZWhhdmlvciIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVNhbXBsZWREYXRhRGF0YVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db21wb3NpdGlvbkF0dGVzdGF0aW9uTW9kZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVR5cGVSZXN0ZnVsSW50ZXJhY3Rpb24iLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0seyJuYW1lIjoiVG9TdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InZhbHVlIiwidHlwZSI6Ik9wZXJhbmRSZWYifX0sIm9wZXJhbmQiOlt7Im5hbWUiOiJ2YWx1ZSIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlU3lzdGVtSGllcmFyY2h5TWVhbmluZyIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfXZDb25maWRlbnRpYWxpdHlDbGFzc2lmaWNhdGlvbiIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnRyYWN0UmVzb3VyY2VQdWJsaWNhdGlvblN0YXR1c0NvZGVzIiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fV19LHsibmFtZSI6IlRvU3RyaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInR5cGUiOiJGdW5jdGlvbkRlZiIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJPcGVyYW5kUmVmIn19LCJvcGVyYW5kIjpbeyJuYW1lIjoidmFsdWUiLCJvcGVyYW5kVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmlzaW9uQmFzZSIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfSx7Im5hbWUiOiJUb1N0cmluZyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJ0eXBlIjoiRnVuY3Rpb25EZWYiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoidmFsdWUiLCJ0eXBlIjoiT3BlcmFuZFJlZiJ9fSwib3BlcmFuZCI6W3sibmFtZSI6InZhbHVlIiwib3BlcmFuZFR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUJ1bmRsZVR5cGUiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX1dfX19" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInN0YXRlbWVudHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiVG9JbnRlcnZhbCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJwZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAicG9pbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAibG93Q2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICJoaWdoQ2xvc2VkIiA6IHRydWUsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnRlcnZhbCIsCiAgICAgICAgICAgICAgICAgICJsb3ciIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJwZXJpb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJoaWdoIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAicGVyaW9kIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBlcmlvZCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvUXVhbnRpdHkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiY2xhc3NUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluc3RhbmNlIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInVuaXQiLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInVuaXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAicXVhbnRpdHkiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb0ludGVydmFsIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInJhbmdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW50ZXJ2YWxUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgInBvaW50VHlwZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVF1YW50aXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImxvd0Nsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAiaGlnaENsb3NlZCIgOiB0cnVlLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW50ZXJ2YWwiLAogICAgICAgICAgICAgICAgICAibG93IiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvUXVhbnRpdHkiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImxvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgImhpZ2giIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9RdWFudGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaGlnaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAicmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAicmFuZ2UiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmFuZ2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvZGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiY2xhc3NUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUNvZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJzeXN0ZW0iLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kaW5nIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJjbGFzc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Q29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiY29kZXMiLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJjb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAiY29uY2VwdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlYWJsZUNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfXV1aWQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVRlc3RTY3JpcHRSZXF1ZXN0TWV0aG9kQ29kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U29ydERpcmVjdGlvbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QmlvbG9naWNhbGx5RGVyaXZlZFByb2R1Y3RTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVVuaXRzT2ZUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BZGRyZXNzVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWxsZXJneUludG9sZXJhbmNlQ2F0ZWdvcnkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUlzc3VlU2V2ZXJpdHkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVUZWFtU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmNvdW50ZXJTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZURlZmluaXRpb25LaW5kIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QdWJsaWNhdGlvblN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RkhJUlZlcnNpb24iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVQbGFuQWN0aXZpdHlLaW5kIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBTb3VyY2VMaXN0TW9kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVxdWVzdFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RyYW5kVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVlc3Rpb25uYWlyZVJlc3BvbnNlU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TZWFyY2hDb21wYXJhdG9yIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1DaGFyZ2VJdGVtU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25QYXJ0aWNpcGFudFR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZVR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNhcmVQbGFuQWN0aXZpdHlTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUludm9pY2VTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNsYWltUHJvY2Vzc2luZ0NvZGVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXF1ZXN0UmVzb3VyY2VUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXJ0aWNpcGF0aW9uU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VOYW1lVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RG9jdW1lbnRNb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Bc3NlcnRpb25PcGVyYXRvclR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURheXNPZldlZWsiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUlzc3VlVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Y2Fub25pY2FsIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBDb250ZXh0VHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RmFtaWx5SGlzdG9yeVN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeHRlbnNpb25Db250ZXh0VHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXNzZXJ0aW9uUmVzcG9uc2VUeXBlcyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVxdWVzdEludGVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9c3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25SZXF1aXJlZEJlaGF2aW9yIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1HcmFwaENvbXBhcnRtZW50VXNlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1vcmllbnRhdGlvblR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFjY291bnRTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUlkZW50aWZpZXJVc2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZU1hcFRhcmdldExpc3RNb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeHBvc3VyZVN0YXRlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0UGFydGljaXBhbnRUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1CaW5kaW5nU3RyZW5ndGgiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVJlcXVlc3RQcmlvcml0eSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGFydGljaXBhbnRSZXF1aXJlZCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9WFBhdGhVc2FnZVR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfWlkIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GaWx0ZXJPcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFtaW5nU3lzdGVtVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29udHJhY3RSZXNvdXJjZVN0YXR1c0NvZGVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaFN1YmplY3RTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVN0cnVjdHVyZU1hcFRyYW5zZm9ybSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzcG9uc2VUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9EZWNpbWFsIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9ZGVjaW1hbCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWdncmVnYXRpb25Nb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1zZXF1ZW5jZVR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVN5c3RlbVJlc3RmdWxJbnRlcmFjdGlvbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWR2ZXJzZUV2ZW50QWN0dWFsaXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdWJzY3JpcHRpb25DaGFubmVsVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXNzZXJ0aW9uRGlyZWN0aW9uVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2FyZVBsYW5JbnRlbnQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZUNyaXRpY2FsaXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm9wZXJ0eVJlcHJlc2VudGF0aW9uIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UcmlnZ2VyVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29tcG9zaXRpb25TdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFwcG9pbnRtZW50U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZXNzYWdlU2lnbmlmaWNhbmNlQ2F0ZWdvcnkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUxpc3RNb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNlYXJjaEVsZW1lbnRUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvblN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzb3VyY2VUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9Cb29sZWFuIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Ym9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3RydWN0dXJlTWFwR3JvdXBUeXBlTW9kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3VwcGx5UmVxdWVzdFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RW5jb3VudGVyTG9jYXRpb25TdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbmFsRGVsZXRlU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn11cmwiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfXVyaSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VXNlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SWRlbnRpdHlBc3N1cmFuY2VMZXZlbCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ29sb3IiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1RpbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn10aW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb25hbFJlYWRTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFsbGVyZ3lJbnRvbGVyYW5jZVNldmVyaXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GaW5hbmNpYWxSZXNvdXJjZVN0YXR1c0NvZGVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PcGVyYXRpb25LaW5kIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdWJzY3JpcHRpb25TdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUdvYWxMaWZlY3ljbGVTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uRGF0YVR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURvY3VtZW50UmVmZXJlbmNlU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1yZXBvc2l0b3J5VHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TG9jYXRpb25TdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU5vdGVUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlU3lzdGVtQ29udGVudE1vZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUZISVJEZXZpY2VTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnRhY3RQb2ludFN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2xvdFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJvcGVydHlUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UeXBlRGVyaXZhdGlvblJ1bGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUd1aWRhbmNlUmVzcG9uc2VTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVJlbGF0ZWRBcnRpZmFjdFR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfW9pZCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29tcGFydG1lbnRUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdEludGVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SW52b2ljZVByaWNlQ29tcG9uZW50VHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2FsaWJyYXRpb25TdGF0ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R3JvdXBUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbmFibGVXaGVuQmVoYXZpb3IiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVRhc2tJbnRlbnQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvbkV2YWx1YXRpb25TdGF0dXNDb2RlcyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXhhbXBsZVNjZW5hcmlvQWN0b3JUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Qcm92ZW5hbmNlRW50aXR5Um9sZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3BlY2ltZW5TdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVJlc3RmdWxDYXBhYmlsaXR5TW9kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV0ZWN0ZWRJc3N1ZVNldmVyaXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1WaXNpb25FeWVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25zZW50RGF0YU1lYW5pbmciLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfW1lc3NhZ2VoZWFkZXJSZXNwb25zZVJlcXVlc3QiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUd1aWRlUGFnZUdlbmVyYXRpb24iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURvY3VtZW50UmVsYXRpb25zaGlwVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9VmFyaWFibGVUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0UmVzdWx0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25jZXB0TWFwR3JvdXBVbm1hcHBlZE1vZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb0RhdGVUaW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9aW5zdGFudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvRGF0ZVRpbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1kYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfWRhdGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb0ludGVnZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1wb3NpdGl2ZUludCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2xpbmljYWxJbXByZXNzaW9uU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FbGlnaWJpbGl0eVJlc3BvbnNlUHVycG9zZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFycmF0aXZlU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1JbWFnaW5nU3R1ZHlTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVuZHBvaW50U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1CaW9sb2dpY2FsbHlEZXJpdmVkUHJvZHVjdENhdGVnb3J5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZXNvdXJjZVZlcnNpb25Qb2xpY3kiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFjdGlvbkNhcmRpbmFsaXR5QmVoYXZpb3IiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUdyb3VwTWVhc3VyZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFtaW5nU3lzdGVtSWRlbnRpZmllclR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUltbXVuaXphdGlvblN0YXR1c0NvZGVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdHVzQ29kZXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURpc2NyaW1pbmF0b3JUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TdHJ1Y3R1cmVNYXBJbnB1dE1vZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUxpbmthZ2VUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1SZWZlcmVuY2VIYW5kbGluZ1BvbGljeSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVzZWFyY2hTdHVkeVN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QXVkaXRFdmVudE91dGNvbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVNwZWNpbWVuQ29udGFpbmVkUHJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uUmVsYXRpb25zaGlwVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uc3RyYWludFNldmVyaXR5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FdmVudENhcGFiaWxpdHlNb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlU2VhcmNoU3VwcG9ydCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb25SYW5nZUNhdGVnb3J5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1VRElFbnRyeVR5cGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZU1ldHJpY0NhdGVnb3J5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UZXN0UmVwb3J0QWN0aW9uUmVzdWx0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1DYXBhYmlsaXR5U3RhdGVtZW50S2luZCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXZlbnRUaW1pbmciLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVNlYXJjaFBhcmFtVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uR3JvdXBpbmdCZWhhdmlvciIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U3RydWN0dXJlTWFwTW9kZWxNb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1UYXNrU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1CaW9sb2dpY2FsbHlEZXJpdmVkUHJvZHVjdFN0b3JhZ2VTY2FsZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9R3JhcGhDb21wYXJ0bWVudFJ1bGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVNsaWNpbmdSdWxlcyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RXhwbGFuYXRpb25PZkJlbmVmaXRTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUd1aWRlUGFyYW1ldGVyQ29kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q2F0YWxvZ0VudHJ5UmVsYXRpb25UeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1MaW5rVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uY2VwdE1hcEVxdWl2YWxlbmNlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BdWRpdEV2ZW50QWN0aW9uIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TZWFyY2hNb2RpZmllckNvZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUV2ZW50U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PcGVyYXRpb25QYXJhbWV0ZXJVc2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnNlbnRQcm92aXNpb25UeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1BY3Rpb25Db25kaXRpb25LaW5kIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1xdWFsaXR5VHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWRtaW5pc3RyYXRpdmVHZW5kZXIiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVF1ZXN0aW9ubmFpcmVJdGVtVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljQ2FsaWJyYXRpb25UeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FdmlkZW5jZVZhcmlhYmxlVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Y29kZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uU2VsZWN0aW9uQmVoYXZpb3IiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVN1cHBseURlbGl2ZXJ5U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EaWFnbm9zdGljUmVwb3J0U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1GbGFnU3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TUERYTGljZW5zZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TGlzdFN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9YmFzZTY0QmluYXJ5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EZXZpY2VVc2VTdGF0ZW1lbnRTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUF1ZGl0RXZlbnRBZ2VudE5ldHdvcmtUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1FeHByZXNzaW9uTGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUFkZHJlc3NVc2UiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnRhY3RQb2ludFVzZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGV2aWNlTWV0cmljT3BlcmF0aW9uYWxTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnRyaWJ1dG9yVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UmVmZXJlbmNlVmVyc2lvblJ1bGVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWFzdXJlUmVwb3J0U3RhdHVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1TZWFyY2hFbnRyeU1vZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb0ludGVnZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn11bnNpZ25lZEludCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TmFtZVVzZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TG9jYXRpb25Nb2RlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9JbnRlZ2VyIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9aW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RkhJUlN1YnN0YW5jZVN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVlc3Rpb25uYWlyZUl0ZW1PcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9SFRUUFZlcmIiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUVwaXNvZGVPZkNhcmVTdGF0dXMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVJlbWl0dGFuY2VPdXRjb21lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1tYXJrZG93biIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RWxpZ2liaWxpdHlSZXF1ZXN0UHVycG9zZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UXVhbnRpdHlDb21wYXJhdG9yIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWFzdXJlUmVwb3J0VHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9QWN0aW9uUHJlY2hlY2tCZWhhdmlvciIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2FtcGxlZERhdGFEYXRhVHlwZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvbkRlZiIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29tcG9zaXRpb25BdHRlc3RhdGlvbk1vZGUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVR5cGVSZXN0ZnVsSW50ZXJhY3Rpb24iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVTeXN0ZW1IaWVyYXJjaHlNZWFuaW5nIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn12Q29uZmlkZW50aWFsaXR5Q2xhc3NpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gXQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbnRyYWN0UmVzb3VyY2VQdWJsaWNhdGlvblN0YXR1c0NvZGVzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1WaXNpb25CYXNlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk9wZXJhbmRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1CdW5kbGVUeXBlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] -} \ No newline at end of file +} diff --git a/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json index 12da16a3..1530757c 100644 --- a/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json +++ b/src/cds-library/CRD-DTR/TIRF/R4/resources/Library-R4-TIRFPrescriberEnrollment-prepopulation.json @@ -107,7 +107,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiVElSRlByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjIwLCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MjAsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUSVJGUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MjAsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoyMCwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjo0MywiZW5kTGluZSI6NDgsImVuZENoYXIiOjQ3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0OCwic3RhcnRDaGFyIjoxMzIsImVuZExpbmUiOjQ4LCJlbmRDaGFyIjoxMzYsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJ2ZXJzaW9uIjoiMC4xLjAifSwic2NoZW1hSWRlbnRpZmllciI6eyJpZCI6InVybjpobDctb3JnOmVsbSIsInZlcnNpb24iOiJyMSJ9LCJ1c2luZ3MiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJTeXN0ZW0iLCJ1cmkiOiJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEifSx7ImxvY2FsSWRlbnRpZmllciI6IkZISVIiLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwiaW5jbHVkZXMiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJGSElSSGVscGVycyIsInBhdGgiOiJGSElSSGVscGVycyIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInBhcmFtZXRlcnMiOnsiZGVmIjpbeyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6Im1lZGljYXRpb25fcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6Ik9uY29sb2dpc3QiLCJpZCI6IjM5NDU5MjAwNCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiU05PTUVELUNUIn19XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6IlF1YWxpZmljYXRpb25zIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sibmFtZSI6IlF1YWxpZmljYXRpb25zIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJQcmFjdGl0aW9uZXJSb2xlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJwcm9sZSIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InByYWN0aXRpb25lciIsInNjb3BlIjoicHJvbGUiLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6IlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJTcGVjaWFsdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZXMiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InNwZWNpYWx0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUHJhY3RpdGlvbmVyUm9sZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19LHsibmFtZSI6IlByZWZlcnJlZENvbW11bmljYXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoidGVsZWNvbSIsImV4cHJlc3Npb24iOnsicGF0aCI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJhbmsiLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19XX19LHsibmFtZSI6Ik9yZ05hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im9yZyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdfX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7Im5hbWUiOiJNRCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InR5cGUiLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiTUQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJWYWxpZFRJUkZDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJxdWFsaWZpY2F0aW9uIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIxMjM3MDUxIiwidHlwZSI6IkxpdGVyYWwifV19XX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUSVJGQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5SXNzdWVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJkaXNwbGF5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJpc3N1ZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUSVJGQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiVElSRlByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJsaWJyYXJ5VmVyc2lvbiIgOiAiMC4xLjAiLAogICAgICAgICAic3RhcnRMaW5lIiA6IDIwLAogICAgICAgICAic3RhcnRDaGFyIiA6IDEyMywKICAgICAgICAgImVuZExpbmUiIDogMjAsCiAgICAgICAgICJlbmRDaGFyIiA6IDEyNywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiAyMCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMjMsCiAgICAgICAgICJlbmRMaW5lIiA6IDIwLAogICAgICAgICAiZW5kQ2hhciIgOiAxMjcsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSwgewogICAgICAgICAibGlicmFyeUlkIiA6ICJUSVJGUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogNDgsCiAgICAgICAgICJzdGFydENoYXIiIDogNDMsCiAgICAgICAgICJlbmRMaW5lIiA6IDQ4LAogICAgICAgICAiZW5kQ2hhciIgOiA0NywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlRJUkZQcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiA0OCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMzIsCiAgICAgICAgICJlbmRMaW5lIiA6IDQ4LAogICAgICAgICAiZW5kQ2hhciIgOiAxMzYsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSBdLAogICAgICAiaWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAiVElSRlByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSUNELTEwLUNNIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9sb2luYy5vcmciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9uY29sb2dpc3QiLAogICAgICAgICAgICAiaWQiIDogIjM5NDU5MjAwNCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29udGV4dHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJzdGF0ZW1lbnRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvZGF5IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlRvZGF5IgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2FsZXNjZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJkZXZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwZXJmb3JtZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlcXVlc3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiUHJhY3RpdGlvbmVyLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJRdWFsaWZpY2F0aW9ucyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJDcmVkZW50aWFscyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJRdWFsaWZpY2F0aW9ucyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQcmFjdGl0aW9uZXJSb2xlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAicHJvbGUiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJhY3RpdGlvbmVyUm9sZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAicHJvbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNwZWNpYWx0eSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlcyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db25jZXB0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAic3RyaWN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzcGVjaWFsdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlByYWN0aXRpb25lclJvbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgImFzVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db2RlYWJsZUNvbmNlcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJlZmVycmVkQ29tbXVuaWNhdGlvbiIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXN0IiwKICAgICAgICAgICAgICAgImVsZW1lbnQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyYW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9yZ05hbWUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIm9yZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNRCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIk1EIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVmFsaWRUSVJGQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQW5kIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3lzdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMTIzNzA1MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInRleHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZhbGlkVElSRkNyZWRlbnRpYWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRoaXJkUGFydHlJc3N1ZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlciIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmFsaWRUSVJGQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] - } \ No newline at end of file + } diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json index f2d71fff..7d0187a0 100644 --- a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json @@ -89,11 +89,11 @@ "content": [ { "contentType": "text/cql", - "data": "bGlicmFyeSBUdXJhbGlvUHJlcG9wdWxhdGlvbiAgdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIHZlcnNpb24gJzEuMC4yJyBjYWxsZWQgQ0RTCmluY2x1ZGUgRFRSSGVscGVycyB2ZXJzaW9uICcwLjEuMCcgY2FsbGVkIERUUgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKCnZhbHVlc2V0ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiOiAnaHR0cHM6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTgnCnZhbHVlc2V0ICJUdXJhbGlvVmFsdWVTZXQiOiAnaHR0cHM6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTcnCgpjb2RlICIyOTQ2My03IjogJzI5NDYzLTcnIGZyb20gIkxPSU5DIgpjb2RlICIyMTgzMTAyIjogJzIxODMxMDInIGZyb20gIlJYTk9STSIKY29kZSAiQVNUIjogJzE5MjAtOCcgZnJvbSAiTE9JTkMiCmNvZGUgIkFMVCI6ICcxNzQyLTYnIGZyb20gIkxPSU5DIgpjb2RlICJHR1QiOiAnMjMyNC0yJyBmcm9tICJMT0lOQyIKY29kZSAiVG90YWxCaWxpcnViaW4iOiAnMTk3NS0yJyBmcm9tICJMT0lOQyIKY29kZSAiRGlyZWN0QmlsaXJ1YmluIjogJzE5NjgtNycgZnJvbSAiTE9JTkMiCmNvZGUgIkFMUCI6ICcxMzg3NC0zJyBmcm9tICJMT0lOQyIKY29kZSAiQWxidW1pbiI6ICcxNzUxLTcnIGZyb20gIkxPSU5DIgpjb2RlICJQVCI6ICc1OTAyLTInIGZyb20gIkxPSU5DIgoKcGFyYW1ldGVyIG1lZGljYXRpb25fcmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdApwYXJhbWV0ZXIgbWVkaWNhdGlvbl9kaXNwZW5zZSBNZWRpY2F0aW9uRGlzcGVuc2UKCmNvbnRleHQgUGF0aWVudAoKLy8gZ2V0IG9ic2VydmF0aW9ucyAKZGVmaW5lICJXZWlnaHRMaXN0IjogW09ic2VydmF0aW9uOiAiMjk0NjMtNyJdCmRlZmluZSAiTGF0ZXN0V2VpZ2h0IjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZCgiV2VpZ2h0TGlzdCIpLCdtZycpKQpkZWZpbmUgIkxhdGVzdFdlaWdodFJlc3VsdCI6IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RXZWlnaHQiKQoKZGVmaW5lICJUdXJhbGlvIjogW01lZGljYXRpb25TdGF0ZW1lbnQ6ICJUdXJhbGlvVmFsdWVTZXQiXQpkZWZpbmUgIlRha2luZ1R1cmFsaW8iOiBleGlzdHMoIlR1cmFsaW8iKQpkZWZpbmUgIlR1cmFsaW9EYXRlIjogCiAgaWYgIlRha2luZ1R1cmFsaW8iIAogICAgdGhlbiBGaXJzdCgiVHVyYWxpbyIpLmVmZmVjdGl2ZS52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0QVNUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBU1QiXSksICdVL0wnKSkKZGVmaW5lICJBU1RSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QVNUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkFTVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFTVCIpCiAgICB0aGVuICJMYXRlc3RBU1QiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0QUxUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBTFQiXSksICdVL0wnKSkKZGVmaW5lICJBTFRSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QUxUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkFMVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFMVCIpCiAgICB0aGVuICJMYXRlc3RBTFQiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0R0dUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJHR1QiXSksICdVL0wnKSkKZGVmaW5lICJHR1RSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0R0dUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkdHVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEdHVCIpCiAgICB0aGVuICJMYXRlc3RHR1QiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0VG90YWxCaWxpcnViaW4iOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIlRvdGFsQmlsaXJ1YmluIl0pLCAnbWcvZEwnKSkKZGVmaW5lICJUb3RhbEJpbGlydWJpblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RUb3RhbEJpbGlydWJpbiIpIHRvIFN0cmluZykgKyAnIG1nL2RMJwpkZWZpbmUgIlRvdGFsQmlsaXJ1YmluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0VG90YWxCaWxpcnViaW4iKQogICAgdGhlbiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJEaXJlY3RCaWxpcnViaW4iXSksICdtZy9kTCcpKQpkZWZpbmUgIkRpcmVjdEJpbGlydWJpblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3REaXJlY3RCaWxpcnViaW4iKSB0byBTdHJpbmcpICsgJyBtZy9kTCcKZGVmaW5lICJEaXJlY3RCaWxpcnViaW5EYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3REaXJlY3RCaWxpcnViaW4iKQogICAgdGhlbiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFMUCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQUxQIl0pLCAnVS9MJykpCmRlZmluZSAiQUxQUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFMUCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBTFBEYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBTFAiKQogICAgdGhlbiAiTGF0ZXN0QUxQIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFsYnVtaW4iOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIkFsYnVtaW4iXSksICdnL2RMJykpCmRlZmluZSAiQWxidW1pblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RBbGJ1bWluIikgdG8gU3RyaW5nKSArICcgZy9kTCcKZGVmaW5lICJBbGJ1bWluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0QWxidW1pbiIpCiAgICB0aGVuICJMYXRlc3RBbGJ1bWluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdFBUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJQVCJdKSwgJ3MnKSkKZGVmaW5lICJQVFJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RQVCIpIHRvIFN0cmluZykgKyAnIHMnCmRlZmluZSAiUFREYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RQVCIpCiAgICB0aGVuICJMYXRlc3RQVCIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJNZWRMaXN0IjogW01lZGljYXRpb25TdGF0ZW1lbnRdIE0KICB3aGVyZSBNLnN0YXR1cy52YWx1ZSA9ICdhY3RpdmUnCgpkZWZpbmUgIlRha2luZ01lZHMiOiBub3QgZXhpc3RzKCJNZWRMaXN0IikKZGVmaW5lIGZ1bmN0aW9uIEdldE1lZGljYXRpb25zVHVwbGVMaXN0KE1lZFN0YXRlbWVudExpc3QgTGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pik6CiAgZGlzdGluY3QoCiAgICBmbGF0dGVuKAogICAgICBNZWRTdGF0ZW1lbnRMaXN0IE1lZFN0YXRlbWVudAogICAgICAgIGxldCBNZWRpY2F0aW9uTGlzdDoKICAgICAgICAgIChNZWRTdGF0ZW1lbnQubWVkaWNhdGlvbi5jb2RpbmcpIENPRElORwogICAgICAgICAgcmV0dXJuIChGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5kaXNwbGF5ICsgJyAtICcgKyBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5jb2RlKQoKICAgICAgICByZXR1cm4gTWVkaWNhdGlvbkxpc3QgIAogICAgKQogICkgICAKZGVmaW5lICJNZWRzIjogR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QoTWVkTGlzdCkKZGVmaW5lICJNZWRzU3RyaW5nIjogCiAgTWVkcyBNCiAgICBhZ2dyZWdhdGUgUmVzdWx0IHN0YXJ0aW5nICcnOiBSZXN1bHQgKyAnLCAnICsgTQoKZGVmaW5lICJNZWRpY2FsSGlzdG9yeUxpc3QiOiBbQ29uZGl0aW9uOiAiSGVwYXRpY01lZGljYWxIaXN0b3J5Il0KZGVmaW5lICJNZWRpY2FsSGlzdG9yeSI6IERUUi5Db2Rlc0Zyb21Db25kaXRpb25zKENEUy5Db25maXJtZWQoIk1lZGljYWxIaXN0b3J5TGlzdCIpKQ==" + "data": "bGlicmFyeSBUdXJhbGlvUHJlcG9wdWxhdGlvbiAgdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIHZlcnNpb24gJzEuMC4yJyBjYWxsZWQgQ0RTCmluY2x1ZGUgRFRSSGVscGVycyB2ZXJzaW9uICcwLjEuMCcgY2FsbGVkIERUUgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKCnZhbHVlc2V0ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjE5LjE5OCcKdmFsdWVzZXQgIlR1cmFsaW9WYWx1ZVNldCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3JwoKY29kZSAiMjk0NjMtNyI6ICcyOTQ2My03JyBmcm9tICJMT0lOQyIKY29kZSAiMjE4MzEwMiI6ICcyMTgzMTAyJyBmcm9tICJSWE5PUk0iCmNvZGUgIkFTVCI6ICcxOTIwLTgnIGZyb20gIkxPSU5DIgpjb2RlICJBTFQiOiAnMTc0Mi02JyBmcm9tICJMT0lOQyIKY29kZSAiR0dUIjogJzIzMjQtMicgZnJvbSAiTE9JTkMiCmNvZGUgIlRvdGFsQmlsaXJ1YmluIjogJzE5NzUtMicgZnJvbSAiTE9JTkMiCmNvZGUgIkRpcmVjdEJpbGlydWJpbiI6ICcxOTY4LTcnIGZyb20gIkxPSU5DIgpjb2RlICJBTFAiOiAnMTM4NzQtMycgZnJvbSAiTE9JTkMiCmNvZGUgIkFsYnVtaW4iOiAnMTc1MS03JyBmcm9tICJMT0lOQyIKY29kZSAiUFQiOiAnNTkwMi0yJyBmcm9tICJMT0lOQyIKCnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKcGFyYW1ldGVyIG1lZGljYXRpb25fZGlzcGVuc2UgTWVkaWNhdGlvbkRpc3BlbnNlCgpjb250ZXh0IFBhdGllbnQKCi8vIGdldCBvYnNlcnZhdGlvbnMgCmRlZmluZSAiV2VpZ2h0TGlzdCI6IFtPYnNlcnZhdGlvbjogIjI5NDYzLTciXQpkZWZpbmUgIkxhdGVzdFdlaWdodCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoIldlaWdodExpc3QiKSwnbWcnKSkKZGVmaW5lICJMYXRlc3RXZWlnaHRSZXN1bHQiOiBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0V2VpZ2h0IikKCmRlZmluZSAiVHVyYWxpbyI6IFtNZWRpY2F0aW9uU3RhdGVtZW50OiAiVHVyYWxpb1ZhbHVlU2V0Il0KZGVmaW5lICJUYWtpbmdUdXJhbGlvIjogZXhpc3RzKCJUdXJhbGlvIikKZGVmaW5lICJUdXJhbGlvRGF0ZSI6IAogIGlmICJUYWtpbmdUdXJhbGlvIiAKICAgIHRoZW4gRmlyc3QoIlR1cmFsaW8iKS5lZmZlY3RpdmUudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFTVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQVNUIl0pLCAnVS9MJykpCmRlZmluZSAiQVNUUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFTVCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBU1REYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBU1QiKQogICAgdGhlbiAiTGF0ZXN0QVNUIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFMVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQUxUIl0pLCAnVS9MJykpCmRlZmluZSAiQUxUUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFMVCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBTFREYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBTFQiKQogICAgdGhlbiAiTGF0ZXN0QUxUIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEdHVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiR0dUIl0pLCAnVS9MJykpCmRlZmluZSAiR0dUUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEdHVCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJHR1REYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RHR1QiKQogICAgdGhlbiAiTGF0ZXN0R0dUIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdFRvdGFsQmlsaXJ1YmluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJUb3RhbEJpbGlydWJpbiJdKSwgJ21nL2RMJykpCmRlZmluZSAiVG90YWxCaWxpcnViaW5SZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0VG90YWxCaWxpcnViaW4iKSB0byBTdHJpbmcpICsgJyBtZy9kTCcKZGVmaW5lICJUb3RhbEJpbGlydWJpbkRhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdFRvdGFsQmlsaXJ1YmluIikKICAgIHRoZW4gIkxhdGVzdFRvdGFsQmlsaXJ1YmluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdERpcmVjdEJpbGlydWJpbiI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiRGlyZWN0QmlsaXJ1YmluIl0pLCAnbWcvZEwnKSkKZGVmaW5lICJEaXJlY3RCaWxpcnViaW5SZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIikgdG8gU3RyaW5nKSArICcgbWcvZEwnCmRlZmluZSAiRGlyZWN0QmlsaXJ1YmluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIikKICAgIHRoZW4gIkxhdGVzdERpcmVjdEJpbGlydWJpbiIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJMYXRlc3RBTFAiOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIkFMUCJdKSwgJ1UvTCcpKQpkZWZpbmUgIkFMUFJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RBTFAiKSB0byBTdHJpbmcpICsgJyBVL0wnCmRlZmluZSAiQUxQRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0QUxQIikKICAgIHRoZW4gIkxhdGVzdEFMUCIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJMYXRlc3RBbGJ1bWluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBbGJ1bWluIl0pLCAnZy9kTCcpKQpkZWZpbmUgIkFsYnVtaW5SZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QWxidW1pbiIpIHRvIFN0cmluZykgKyAnIGcvZEwnCmRlZmluZSAiQWxidW1pbkRhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFsYnVtaW4iKQogICAgdGhlbiAiTGF0ZXN0QWxidW1pbiIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJMYXRlc3RQVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiUFQiXSksICdzJykpCmRlZmluZSAiUFRSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0UFQiKSB0byBTdHJpbmcpICsgJyBzJwpkZWZpbmUgIlBURGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0UFQiKQogICAgdGhlbiAiTGF0ZXN0UFQiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTWVkTGlzdCI6IFtNZWRpY2F0aW9uU3RhdGVtZW50XSBNCiAgd2hlcmUgTS5zdGF0dXMudmFsdWUgPSAnYWN0aXZlJwoKZGVmaW5lICJUYWtpbmdNZWRzIjogbm90IGV4aXN0cygiTWVkTGlzdCIpCmRlZmluZSBmdW5jdGlvbiBHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdChNZWRTdGF0ZW1lbnRMaXN0IExpc3Q8TWVkaWNhdGlvblN0YXRlbWVudD4pOgogIGRpc3RpbmN0KAogICAgZmxhdHRlbigKICAgICAgTWVkU3RhdGVtZW50TGlzdCBNZWRTdGF0ZW1lbnQKICAgICAgICBsZXQgTWVkaWNhdGlvbkxpc3Q6CiAgICAgICAgICAoTWVkU3RhdGVtZW50Lm1lZGljYXRpb24uY29kaW5nKSBDT0RJTkcKICAgICAgICAgIHJldHVybiAoRkhJUkhlbHBlcnMuVG9Db2RlKENPRElORykuZGlzcGxheSArICcgLSAnICsgRkhJUkhlbHBlcnMuVG9Db2RlKENPRElORykuY29kZSkKCiAgICAgICAgcmV0dXJuIE1lZGljYXRpb25MaXN0ICAKICAgICkKICApICAgCmRlZmluZSAiTWVkcyI6IEdldE1lZGljYXRpb25zVHVwbGVMaXN0KE1lZExpc3QpCmRlZmluZSAiTWVkc1N0cmluZyI6IAogIE1lZHMgTQogICAgYWdncmVnYXRlIFJlc3VsdCBzdGFydGluZyAnJzogUmVzdWx0ICsgJywgJyArIE0KCmRlZmluZSAiTWVkaWNhbEhpc3RvcnlMaXN0IjogW0NvbmRpdGlvbjogIkhlcGF0aWNNZWRpY2FsSGlzdG9yeSJdCmRlZmluZSAiTWVkaWNhbEhpc3RvcnkiOiBEVFIuQ29kZXNGcm9tQ29uZGl0aW9ucyhDRFMuQ29uZmlybWVkKCJNZWRpY2FsSGlzdG9yeUxpc3QiKSk=" }, { "contentType": "application/elm+json", - "data":"eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0LCJzdGFydENoYXIiOjEsImVuZExpbmUiOjQsImVuZENoYXIiOjY3LCJtZXNzYWdlIjoiQ291bGQgbm90IGxvYWQgc291cmNlIGZvciBsaWJyYXJ5IENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiQ0RTX0Nvbm5lY3RfQ29tbW9uc19mb3JfRkhJUnY0MDAiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeVZlcnNpb25JZCI6IjEuMC4yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NSwic3RhcnRDaGFyIjoxLCJlbmRMaW5lIjo1LCJlbmRDaGFyIjo0NSwibWVzc2FnZSI6IkNvdWxkIG5vdCBsb2FkIHNvdXJjZSBmb3IgbGlicmFyeSBEVFJIZWxwZXJzLiIsImVycm9yVHlwZSI6ImluY2x1ZGUiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0YXJnZXRJbmNsdWRlTGlicmFyeUlkIjoiRFRSSGVscGVycyIsInRhcmdldEluY2x1ZGVMaWJyYXJ5VmVyc2lvbklkIjoiMC4xLjAiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjozNCwic3RhcnRDaGFyIjoyNCwiZW5kTGluZSI6MzQsImVuZENoYXIiOjI2LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjM1LCJzdGFydENoYXIiOjMwLCJlbmRMaW5lIjozNSwiZW5kQ2hhciI6MzIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NDUsInN0YXJ0Q2hhciI6MjEsImVuZExpbmUiOjQ1LCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo0Niwic3RhcnRDaGFyIjozMCwiZW5kTGluZSI6NDYsImVuZENoYXIiOjMyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjQ4LCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo0OCwiZW5kQ2hhciI6MjMsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0QVNUIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NTMsInN0YXJ0Q2hhciI6MjEsImVuZExpbmUiOjUzLCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo1NCwic3RhcnRDaGFyIjozMCwiZW5kTGluZSI6NTQsImVuZENoYXIiOjMyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjU2LCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo1NiwiZW5kQ2hhciI6MjMsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0QUxUIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NjEsInN0YXJ0Q2hhciI6MjEsImVuZExpbmUiOjYxLCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo2Miwic3RhcnRDaGFyIjozMCwiZW5kTGluZSI6NjIsImVuZENoYXIiOjMyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjY0LCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo2NCwiZW5kQ2hhciI6MjMsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0R0dUIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6NjksInN0YXJ0Q2hhciI6MzIsImVuZExpbmUiOjY5LCJlbmRDaGFyIjozNCwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgQ0RTIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo3MCwic3RhcnRDaGFyIjo0MSwiZW5kTGluZSI6NzAsImVuZENoYXIiOjQzLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBEVFIgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjcyLCJzdGFydENoYXIiOjEzLCJlbmRMaW5lIjo3MiwiZW5kQ2hhciI6MzQsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0VG90YWxCaWxpcnViaW4gYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo3Nywic3RhcnRDaGFyIjozMywiZW5kTGluZSI6NzcsImVuZENoYXIiOjM1LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjc4LCJzdGFydENoYXIiOjQyLCJlbmRMaW5lIjo3OCwiZW5kQ2hhciI6NDQsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6ODAsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjgwLCJlbmRDaGFyIjozNSwibWVzc2FnZSI6IkNvdWxkIG5vdCB2YWxpZGF0ZSByZWZlcmVuY2UgdG8gZXhwcmVzc2lvbiBMYXRlc3REaXJlY3RCaWxpcnViaW4gYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo4NSwic3RhcnRDaGFyIjoyMSwiZW5kTGluZSI6ODUsImVuZENoYXIiOjIzLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjg2LCJzdGFydENoYXIiOjMwLCJlbmRMaW5lIjo4NiwiZW5kQ2hhciI6MzIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6ODgsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjg4LCJlbmRDaGFyIjoyMywibWVzc2FnZSI6IkNvdWxkIG5vdCB2YWxpZGF0ZSByZWZlcmVuY2UgdG8gZXhwcmVzc2lvbiBMYXRlc3RBTFAgYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo5Mywic3RhcnRDaGFyIjoyNSwiZW5kTGluZSI6OTMsImVuZENoYXIiOjI3LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjk0LCJzdGFydENoYXIiOjM0LCJlbmRMaW5lIjo5NCwiZW5kQ2hhciI6MzYsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6OTYsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjk2LCJlbmRDaGFyIjoyNywibWVzc2FnZSI6IkNvdWxkIG5vdCB2YWxpZGF0ZSByZWZlcmVuY2UgdG8gZXhwcmVzc2lvbiBMYXRlc3RBbGJ1bWluIGJlY2F1c2UgaXRzIGRlZmluaXRpb24gY29udGFpbnMgZXJyb3JzLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MTAxLCJzdGFydENoYXIiOjIwLCJlbmRMaW5lIjoxMDEsImVuZENoYXIiOjIyLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgaWRlbnRpZmllciBDRFMgaW4gdGhlIGN1cnJlbnQgbGlicmFyeS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJlcnJvciIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjEwMiwic3RhcnRDaGFyIjoyOSwiZW5kTGluZSI6MTAyLCJlbmRDaGFyIjozMSwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGlkZW50aWZpZXIgRFRSIGluIHRoZSBjdXJyZW50IGxpYnJhcnkuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjoxMDQsInN0YXJ0Q2hhciI6MTMsImVuZExpbmUiOjEwNCwiZW5kQ2hhciI6MjIsIm1lc3NhZ2UiOiJDb3VsZCBub3QgdmFsaWRhdGUgcmVmZXJlbmNlIHRvIGV4cHJlc3Npb24gTGF0ZXN0UFQgYmVjYXVzZSBpdHMgZGVmaW5pdGlvbiBjb250YWlucyBlcnJvcnMuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5IjoiZXJyb3IiLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjoxMzAsInN0YXJ0Q2hhciI6MjYsImVuZExpbmUiOjEzMCwiZW5kQ2hhciI6MjgsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBpZGVudGlmaWVyIERUUiBpbiB0aGUgY3VycmVudCBsaWJyYXJ5LiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6ImVycm9yIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifV0sImlkZW50aWZpZXIiOnsiaWQiOiJUdXJhbGlvUHJlcG9wdWxhdGlvbiIsInZlcnNpb24iOiIwLjEuMCJ9LCJzY2hlbWFJZGVudGlmaWVyIjp7ImlkIjoidXJuOmhsNy1vcmc6ZWxtIiwidmVyc2lvbiI6InIxIn0sInVzaW5ncyI6eyJkZWYiOlt7ImxvY2FsSWRlbnRpZmllciI6IlN5c3RlbSIsInVyaSI6InVybjpobDctb3JnOmVsbS10eXBlczpyMSJ9LHsibG9jYWxJZGVudGlmaWVyIjoiRkhJUiIsInVyaSI6Imh0dHA6Ly9obDcub3JnL2ZoaXIiLCJ2ZXJzaW9uIjoiNC4wLjAifV19LCJpbmNsdWRlcyI6eyJkZWYiOlt7ImxvY2FsSWRlbnRpZmllciI6IkZISVJIZWxwZXJzIiwicGF0aCI6IkZISVJIZWxwZXJzIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwicGFyYW1ldGVycyI6eyJkZWYiOlt7Im5hbWUiOiJtZWRpY2F0aW9uX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25SZXF1ZXN0IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fSx7Im5hbWUiOiJtZWRpY2F0aW9uX2Rpc3BlbnNlIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uRGlzcGVuc2UiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sInZhbHVlU2V0cyI6eyJkZWYiOlt7Im5hbWUiOiJIZXBhdGljTWVkaWNhbEhpc3RvcnkiLCJpZCI6Imh0dHBzOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk4IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJUdXJhbGlvVmFsdWVTZXQiLCJpZCI6Imh0dHBzOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifV19LCJjb2RlcyI6eyJkZWYiOlt7Im5hbWUiOiIyOTQ2My03IiwiaWQiOiIyOTQ2My03IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fSx7Im5hbWUiOiIyMTgzMTAyIiwiaWQiOiIyMTgzMTAyIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJSWE5PUk0ifX0seyJuYW1lIjoiQVNUIiwiaWQiOiIxOTIwLTgiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGVTeXN0ZW0iOnsibmFtZSI6IkxPSU5DIn19LHsibmFtZSI6IkFMVCIsImlkIjoiMTc0Mi02IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fSx7Im5hbWUiOiJHR1QiLCJpZCI6IjIzMjQtMiIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiTE9JTkMifX0seyJuYW1lIjoiVG90YWxCaWxpcnViaW4iLCJpZCI6IjE5NzUtMiIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiTE9JTkMifX0seyJuYW1lIjoiRGlyZWN0QmlsaXJ1YmluIiwiaWQiOiIxOTY4LTciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImNvZGVTeXN0ZW0iOnsibmFtZSI6IkxPSU5DIn19LHsibmFtZSI6IkFMUCIsImlkIjoiMTM4NzQtMyIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiTE9JTkMifX0seyJuYW1lIjoiQWxidW1pbiIsImlkIjoiMTc1MS03IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fSx7Im5hbWUiOiJQVCIsImlkIjoiNTkwMi0yIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJjb2RlU3lzdGVtIjp7Im5hbWUiOiJMT0lOQyJ9fV19LCJjb250ZXh0cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50In1dfSwic3RhdGVtZW50cyI6eyJkZWYiOlt7Im5hbWUiOiJQYXRpZW50IiwiY29udGV4dCI6IlBhdGllbnQiLCJleHByZXNzaW9uIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLCJ0eXBlIjoiUmV0cmlldmUifX19LHsibmFtZSI6IldlaWdodExpc3QiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwiY29kZVByb3BlcnR5IjoiY29kZSIsImNvZGVDb21wYXJhdG9yIjoifiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7Im5hbWUiOiIyOTQ2My03IiwidHlwZSI6IkNvZGVSZWYifX19fSx7Im5hbWUiOiJMYXRlc3RXZWlnaHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJMYXRlc3RXZWlnaHRSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJUdXJhbGlvIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlVuaW9uIiwib3BlcmFuZCI6W3siZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwiY29kZVByb3BlcnR5IjoibWVkaWNhdGlvbiIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiVHVyYWxpb1ZhbHVlU2V0IiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fSx7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsImNvZGVQcm9wZXJ0eSI6Im1lZGljYXRpb24iLCJjb2RlQ29tcGFyYXRvciI6ImluIiwidHlwZSI6IlJldHJpZXZlIiwiY29kZXMiOnsibmFtZSI6IlR1cmFsaW9WYWx1ZVNldCIsInByZXNlcnZlIjp0cnVlLCJ0eXBlIjoiVmFsdWVTZXRSZWYifX1dfX0seyJuYW1lIjoiVGFraW5nVHVyYWxpbyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJFeGlzdHMiLCJvcGVyYW5kIjp7Im5hbWUiOiJUdXJhbGlvIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifX19LHsibmFtZSI6IlR1cmFsaW9EYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IklmIiwiY29uZGl0aW9uIjp7Im5hbWUiOiJUYWtpbmdUdXJhbGlvIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifSwidGhlbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImVmZmVjdGl2ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiRmlyc3QiLCJzb3VyY2UiOnsibmFtZSI6IlR1cmFsaW8iLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX19LCJlbHNlIjp7ImFzVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJOdWxsIn19fX0seyJuYW1lIjoiTGF0ZXN0QVNUIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiQVNUUmVzdWx0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiQVNURGF0ZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkxhdGVzdEFMVCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkFMVFJlc3VsdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkFMVERhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJMYXRlc3RHR1QiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJHR1RSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJHR1REYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiTGF0ZXN0VG90YWxCaWxpcnViaW4iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJUb3RhbEJpbGlydWJpblJlc3VsdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IlRvdGFsQmlsaXJ1YmluRGF0ZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkxhdGVzdERpcmVjdEJpbGlydWJpbiIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkRpcmVjdEJpbGlydWJpblJlc3VsdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkRpcmVjdEJpbGlydWJpbkRhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJMYXRlc3RBTFAiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJBTFBSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJBTFBEYXRlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiTGF0ZXN0QWxidW1pbiIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkFsYnVtaW5SZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJBbGJ1bWluRGF0ZSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJOdWxsIn19LHsibmFtZSI6IkxhdGVzdFBUIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6Ik51bGwifX0seyJuYW1lIjoiUFRSZXN1bHQiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJQVERhdGUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fSx7Im5hbWUiOiJNZWRMaXN0IiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Ik0iLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3RhdHVzIiwic2NvcGUiOiJNIiwidHlwZSI6IlByb3BlcnR5In19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6ImFjdGl2ZSIsInR5cGUiOiJMaXRlcmFsIn1dfX19LHsibmFtZSI6IlRha2luZ01lZHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiRXhpc3RzIiwib3BlcmFuZCI6eyJuYW1lIjoiTWVkTGlzdCIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fX0seyJuYW1lIjoiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwidHlwZSI6IkZ1bmN0aW9uRGVmIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiRGlzdGluY3QiLCJvcGVyYW5kIjp7InR5cGUiOiJGbGF0dGVuIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTWVkU3RhdGVtZW50IiwiZXhwcmVzc2lvbiI6eyJuYW1lIjoiTWVkU3RhdGVtZW50TGlzdCIsInR5cGUiOiJPcGVyYW5kUmVmIn19XSwibGV0IjpbeyJpZGVudGlmaWVyIjoiTWVkaWNhdGlvbkxpc3QiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJDT0RJTkciLCJleHByZXNzaW9uIjp7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6Im1lZGljYXRpb24iLCJzY29wZSI6Ik1lZFN0YXRlbWVudCIsInR5cGUiOiJQcm9wZXJ0eSJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJyZXR1cm4iOnsiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJwYXRoIjoiZGlzcGxheSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIgLSAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiVG9Db2RlIiwibGlicmFyeU5hbWUiOiJGSElSSGVscGVycyIsInR5cGUiOiJGdW5jdGlvblJlZiIsIm9wZXJhbmQiOlt7Im5hbWUiOiJDT0RJTkciLCJ0eXBlIjoiQWxpYXNSZWYifV19fV19fX19XSwicmVsYXRpb25zaGlwIjpbXSwicmV0dXJuIjp7ImV4cHJlc3Npb24iOnsibmFtZSI6Ik1lZGljYXRpb25MaXN0IiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn19fX19LCJvcGVyYW5kIjpbeyJuYW1lIjoiTWVkU3RhdGVtZW50TGlzdCIsIm9wZXJhbmRUeXBlU3BlY2lmaWVyIjp7InR5cGUiOiJMaXN0VHlwZVNwZWNpZmllciIsImVsZW1lbnRUeXBlIjp7Im5hbWUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwidHlwZSI6Ik5hbWVkVHlwZVNwZWNpZmllciJ9fX1dfSx7Im5hbWUiOiJNZWRzIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsibmFtZSI6IkdldE1lZGljYXRpb25zVHVwbGVMaXN0IiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sibmFtZSI6Ik1lZExpc3QiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9XX19LHsibmFtZSI6Ik1lZHNTdHJpbmciLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiTSIsImV4cHJlc3Npb24iOnsibmFtZSI6Ik1lZHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fV0sInJlbGF0aW9uc2hpcCI6W10sImFnZ3JlZ2F0ZSI6eyJpZGVudGlmaWVyIjoiUmVzdWx0IiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJuYW1lIjoiUmVzdWx0IiwidHlwZSI6IlF1ZXJ5TGV0UmVmIn0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiLCAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJuYW1lIjoiTSIsInR5cGUiOiJBbGlhc1JlZiJ9XX0sInN0YXJ0aW5nIjp7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIiLCJ0eXBlIjoiTGl0ZXJhbCJ9fX19LHsibmFtZSI6Ik1lZGljYWxIaXN0b3J5TGlzdCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwiY29kZVByb3BlcnR5IjoiY29kZSIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiSGVwYXRpY01lZGljYWxIaXN0b3J5IiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fX0seyJuYW1lIjoiTWVkaWNhbEhpc3RvcnkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTnVsbCJ9fV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImluY2x1ZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAicGF0aCIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiQ0RTIiwKICAgICAgICAgICAgInBhdGgiIDogIkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjEuMC4yIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkRUUiIsCiAgICAgICAgICAgICJwYXRoIiA6ICJEVFJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAicGFyYW1ldGVyVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9kaXNwZW5zZSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvbkRpc3BlbnNlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVTeXN0ZW1zIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIklDRC0xMC1DTSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vbG9pbmMub3JnIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNOT01FRC1DVCIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSWE5PUk0iLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJ2YWx1ZVNldHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSGVwYXRpY01lZGljYWxIaXN0b3J5IiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk4IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlR1cmFsaW9WYWx1ZVNldCIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjE5LjE5NyIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIjI5NDYzLTciLAogICAgICAgICAgICAiaWQiIDogIjI5NDYzLTciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIjIxODMxMDIiLAogICAgICAgICAgICAiaWQiIDogIjIxODMxMDIiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBU1QiLAogICAgICAgICAgICAiaWQiIDogIjE5MjAtOCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxUIiwKICAgICAgICAgICAgImlkIiA6ICIxNzQyLTYiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdHVCIsCiAgICAgICAgICAgICJpZCIgOiAiMjMyNC0yIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpbiIsCiAgICAgICAgICAgICJpZCIgOiAiMTk3NS0yIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJEaXJlY3RCaWxpcnViaW4iLAogICAgICAgICAgICAiaWQiIDogIjE5NjgtNyIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxQIiwKICAgICAgICAgICAgImlkIiA6ICIxMzg3NC0zIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGJ1bWluIiwKICAgICAgICAgICAgImlkIiA6ICIxNzUxLTciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBUIiwKICAgICAgICAgICAgImlkIiA6ICI1OTAyLTIiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29udGV4dHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJzdGF0ZW1lbnRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIldlaWdodExpc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIyOTQ2My03IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFdlaWdodCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldlaWdodExpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIm1nIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RXZWlnaHRSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RXZWlnaHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpbyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogIm1lZGljYXRpb24iLAogICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogImluIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlR1cmFsaW9WYWx1ZVNldCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJWYWx1ZVNldFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRha2luZ1R1cmFsaW8iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpbyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpb0RhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVGFraW5nVHVyYWxpbyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlZmZlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZpcnN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFTVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQVNUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBU1RSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBU1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBU1REYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFTVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBU1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQUxUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFRSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFREYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEdHVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR0dUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJHR1RSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RHR1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJHR1REYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEdHVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RHR1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFRvdGFsQmlsaXJ1YmluIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2RlUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIm1nL2RMIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpblJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFRvdGFsQmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBtZy9kTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpbkRhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdERpcmVjdEJpbGlydWJpbiIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRGlyZWN0QmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWcvZEwiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkRpcmVjdEJpbGlydWJpblJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdERpcmVjdEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgbWcvZEwiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRGlyZWN0QmlsaXJ1YmluRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3REaXJlY3RCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFAiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudCIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJXaXRoVW5pdCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWZXJpZmllZCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJ+IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFMUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2RlUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIlUvTCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxQUmVzdWx0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE9ic2VydmF0aW9uVmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QUxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBVL0wiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxQRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QUxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBbGJ1bWluIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBbGJ1bWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZy9kTCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWxidW1pblJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFsYnVtaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIGcvZEwiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWxidW1pbkRhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QWxidW1pbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBbGJ1bWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RQVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUFQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQVFJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFBUIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBURGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RQVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RQVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkTGlzdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUYWtpbmdNZWRzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk1lZFN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZFN0YXRlbWVudExpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJsZXQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJNZWRpY2F0aW9uTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm1lZGljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk1lZFN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIC0gIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkaWNhdGlvbkxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRTdGF0ZW1lbnRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1lZHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkc1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZHMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAiYWdncmVnYXRlIiA6IHsKICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIlJlc3VsdCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUmVzdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIsICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJzdGFydGluZyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkaWNhbEhpc3RvcnlMaXN0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLAogICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJpbiIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVmFsdWVTZXRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2FsSGlzdG9yeSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb2Rlc0Zyb21Db25kaXRpb25zIiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmZpcm1lZCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2FsSGlzdG9yeUxpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9CiAgIH0KfQ==" } ] -} \ No newline at end of file +} diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json index 414c5f7f..5ededaaa 100644 --- a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json @@ -107,7 +107,7 @@ }, { "contentType": "application/elm+json", - "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsImxpYnJhcnlWZXJzaW9uIjoiMC4xLjAiLCJzdGFydExpbmUiOjI0LCJzdGFydENoYXIiOjEyMywiZW5kTGluZSI6MjQsImVuZENoYXIiOjEyNywibWVzc2FnZSI6Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwibGlicmFyeVZlcnNpb24iOiIwLjEuMCIsInN0YXJ0TGluZSI6MjQsInN0YXJ0Q2hhciI6MTIzLCJlbmRMaW5lIjoyNCwiZW5kQ2hhciI6MTI3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo1NCwic3RhcnRDaGFyIjo0MywiZW5kTGluZSI6NTQsImVuZENoYXIiOjQ3LCJtZXNzYWdlIjoiTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjAuMS4wIiwic3RhcnRMaW5lIjo1NCwic3RhcnRDaGFyIjoxMzIsImVuZExpbmUiOjU0LCJlbmRDaGFyIjoxMzYsIm1lc3NhZ2UiOiJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLCJ2ZXJzaW9uIjoiMC4xLjAifSwic2NoZW1hSWRlbnRpZmllciI6eyJpZCI6InVybjpobDctb3JnOmVsbSIsInZlcnNpb24iOiJyMSJ9LCJ1c2luZ3MiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJTeXN0ZW0iLCJ1cmkiOiJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEifSx7ImxvY2FsSWRlbnRpZmllciI6IkZISVIiLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIiwidmVyc2lvbiI6IjQuMC4wIn1dfSwiaW5jbHVkZXMiOnsiZGVmIjpbeyJsb2NhbElkZW50aWZpZXIiOiJGSElSSGVscGVycyIsInBhdGgiOiJGSElSSGVscGVycyIsInZlcnNpb24iOiI0LjAuMCJ9XX0sInBhcmFtZXRlcnMiOnsiZGVmIjpbeyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19LHsibmFtZSI6Im1lZGljYXRpb25fcmVxdWVzdCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwicGFyYW1ldGVyVHlwZVNwZWNpZmllciI6eyJuYW1lIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLCJ0eXBlIjoiTmFtZWRUeXBlU3BlY2lmaWVyIn19XX0sImNvZGVTeXN0ZW1zIjp7ImRlZiI6W3sibmFtZSI6IklDRC0xMC1DTSIsImlkIjoiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMT0lOQyIsImlkIjoiaHR0cDovL2xvaW5jLm9yZyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiU05PTUVELUNUIiwiaWQiOiJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJSWE5PUk0iLCJpZCI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sInZhbHVlU2V0cyI6eyJkZWYiOlt7Im5hbWUiOiJUdXJhbGlvVmFsdWVTZXQiLCJpZCI6Imh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvZGVzIjp7ImRlZiI6W3sibmFtZSI6Ik9uY29sb2dpc3QiLCJpZCI6IjM5NDU5MjAwNCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiY29kZVN5c3RlbSI6eyJuYW1lIjoiU05PTUVELUNUIn19XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiVG9kYXkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiVG9kYXkifX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IkNvYWxlc2NlIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InBlcmZvcm1lciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiZGV2aWNlX3JlcXVlc3QiLCJ0eXBlIjoiUGFyYW1ldGVyUmVmIn19fX0seyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJwZXJmb3JtZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6InNlcnZpY2VfcmVxdWVzdCIsInR5cGUiOiJQYXJhbWV0ZXJSZWYifX19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InJlZmVyZW5jZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicmVmZXJlbmNlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJlcXVlc3RlciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoibWVkaWNhdGlvbl9yZXF1ZXN0IiwidHlwZSI6IlBhcmFtZXRlclJlZiJ9fX19XX19LHsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6InByYWN0aXRpb25lciIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiQ29uY2F0ZW5hdGUiLCJvcGVyYW5kIjpbeyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiUHJhY3RpdGlvbmVyLyIsInR5cGUiOiJMaXRlcmFsIn0seyJuYW1lIjoiVG9TdHJpbmciLCJsaWJyYXJ5TmFtZSI6IkZISVJIZWxwZXJzIiwidHlwZSI6IkZ1bmN0aW9uUmVmIiwib3BlcmFuZCI6W3sicGF0aCI6ImlkIiwic2NvcGUiOiJwcmFjdGl0aW9uZXIiLCJ0eXBlIjoiUHJvcGVydHkifV19XX0seyJuYW1lIjoiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fX19LHsibmFtZSI6IlF1YWxpZmljYXRpb25zIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJUb0xpc3QiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJDcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJMaXN0IiwiZWxlbWVudCI6W3sibmFtZSI6IlF1YWxpZmljYXRpb25zIiwidHlwZSI6IkV4cHJlc3Npb25SZWYifV19fSx7Im5hbWUiOiJQcmFjdGl0aW9uZXJSb2xlIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJwcm9sZSIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwidHlwZSI6IlJldHJpZXZlIn19XSwicmVsYXRpb25zaGlwIjpbXSwid2hlcmUiOnsidHlwZSI6IkVxdWFsIiwib3BlcmFuZCI6W3sicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJyZWZlcmVuY2UiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InByYWN0aXRpb25lciIsInNjb3BlIjoicHJvbGUiLCJ0eXBlIjoiUHJvcGVydHkifX19LHsibmFtZSI6IlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn1dfX19fSx7Im5hbWUiOiJTcGVjaWFsdHkiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiY29kZXMiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IlRvQ29uY2VwdCIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoiQXMiLCJvcGVyYW5kIjp7InR5cGUiOiJJbmRleGVyIiwib3BlcmFuZCI6W3sicGF0aCI6InNwZWNpYWx0eSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiUHJhY3RpdGlvbmVyUm9sZSIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19LCJhc1R5cGVTcGVjaWZpZXIiOnsibmFtZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsInR5cGUiOiJOYW1lZFR5cGVTcGVjaWZpZXIifX1dfX19LHsibmFtZSI6IlByZWZlcnJlZENvbW11bmljYXRpb24iLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiTGlzdCIsImVsZW1lbnQiOlt7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InR5cGUiOiJTaW5nbGV0b25Gcm9tIiwib3BlcmFuZCI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoidGVsZWNvbSIsImV4cHJlc3Npb24iOnsicGF0aCI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6Ik9yZGVyaW5nUHJvdmlkZXIiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9fX1dLCJyZWxhdGlvbnNoaXAiOltdLCJ3aGVyZSI6eyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InJhbmsiLCJzY29wZSI6InRlbGVjb20iLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjEiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19XX19LHsibmFtZSI6Ik9yZ05hbWUiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiIkdGhpcyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6Im9yZyIsImV4cHJlc3Npb24iOnsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Pcmdhbml6YXRpb24iLCJ0eXBlIjoiUmV0cmlldmUifX1dLCJyZWxhdGlvbnNoaXAiOltdfX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoibmFtZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7Im5hbWUiOiJNRCIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJpZGVudGlmaWVyIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoiaWRlbnRpZmllciIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJFcXVhbCIsIm9wZXJhbmQiOlt7Im5hbWUiOiJUb1N0cmluZyIsImxpYnJhcnlOYW1lIjoiRkhJUkhlbHBlcnMiLCJ0eXBlIjoiRnVuY3Rpb25SZWYiLCJvcGVyYW5kIjpbeyJwYXRoIjoiY29kZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJ0eXBlIjoiSW5kZXhlciIsIm9wZXJhbmQiOlt7InBhdGgiOiJjb2RpbmciLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InR5cGUiLCJzY29wZSI6ImlkZW50aWZpZXIiLCJ0eXBlIjoiUHJvcGVydHkifX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLCJ2YWx1ZSI6IjAiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19XX0seyJ2YWx1ZVR5cGUiOiJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsInZhbHVlIjoiTUQiLCJ0eXBlIjoiTGl0ZXJhbCJ9XX19fX19fSx7Im5hbWUiOiJWYWxpZFR1cmFsaW9DcmVkZW50aWFscyIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJRdWVyeSIsInNvdXJjZSI6W3siYWxpYXMiOiJxdWFsaWZpY2F0aW9uIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoicXVhbGlmaWNhdGlvbiIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiT3JkZXJpbmdQcm92aWRlciIsInR5cGUiOiJFeHByZXNzaW9uUmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJBbmQiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InN5c3RlbSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoic3lzdGVtIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fV0sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fSwicmV0dXJuIjp7ImRpc3RpbmN0IjpmYWxzZSwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX19LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLCJ2YWx1ZSI6Imh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLCJ0eXBlIjoiTGl0ZXJhbCJ9XX0seyJ0eXBlIjoiRXF1YWwiLCJvcGVyYW5kIjpbeyJ0eXBlIjoiU2luZ2xldG9uRnJvbSIsIm9wZXJhbmQiOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IiR0aGlzIiwiZXhwcmVzc2lvbiI6eyJ0eXBlIjoiUXVlcnkiLCJzb3VyY2UiOlt7ImFsaWFzIjoiJHRoaXMiLCJleHByZXNzaW9uIjp7InBhdGgiOiJpZGVudGlmaWVyIiwic2NvcGUiOiJxdWFsaWZpY2F0aW9uIiwidHlwZSI6IlByb3BlcnR5In19XSwid2hlcmUiOnsidHlwZSI6Ik5vdCIsIm9wZXJhbmQiOnsidHlwZSI6IklzTnVsbCIsIm9wZXJhbmQiOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19LCJyZXR1cm4iOnsiZGlzdGluY3QiOmZhbHNlLCJleHByZXNzaW9uIjp7InBhdGgiOiJ2YWx1ZSIsInR5cGUiOiJQcm9wZXJ0eSIsInNvdXJjZSI6eyJuYW1lIjoiJHRoaXMiLCJ0eXBlIjoiQWxpYXNSZWYifX19fX1dLCJ3aGVyZSI6eyJ0eXBlIjoiTm90Iiwib3BlcmFuZCI6eyJ0eXBlIjoiSXNOdWxsIiwib3BlcmFuZCI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsibmFtZSI6IiR0aGlzIiwidHlwZSI6IkFsaWFzUmVmIn19fX0sInJldHVybiI6eyJkaXN0aW5jdCI6ZmFsc2UsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7Im5hbWUiOiIkdGhpcyIsInR5cGUiOiJBbGlhc1JlZiJ9fX19fSx7InZhbHVlVHlwZSI6Int1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwidmFsdWUiOiIyMTgzMTI2IiwidHlwZSI6IkxpdGVyYWwifV19XX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5Q3JlZGVudGlhbHMiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJwYXRoIjoidmFsdWUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6InRleHQiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsicGF0aCI6ImNvZGUiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fSx7Im5hbWUiOiJUaGlyZFBhcnR5SXNzdWVyIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsicGF0aCI6InZhbHVlIiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJkaXNwbGF5IiwidHlwZSI6IlByb3BlcnR5Iiwic291cmNlIjp7InBhdGgiOiJpc3N1ZXIiLCJ0eXBlIjoiUHJvcGVydHkiLCJzb3VyY2UiOnsidHlwZSI6IkluZGV4ZXIiLCJvcGVyYW5kIjpbeyJuYW1lIjoiVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHMiLCJ0eXBlIjoiRXhwcmVzc2lvblJlZiJ9LHsidmFsdWVUeXBlIjoie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwidmFsdWUiOiIwIiwidHlwZSI6IkxpdGVyYWwifV19fX19fV19fX0=" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJsaWJyYXJ5VmVyc2lvbiIgOiAiMC4xLjAiLAogICAgICAgICAic3RhcnRMaW5lIiA6IDI0LAogICAgICAgICAic3RhcnRDaGFyIiA6IDEyMywKICAgICAgICAgImVuZExpbmUiIDogMjQsCiAgICAgICAgICJlbmRDaGFyIiA6IDEyNywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiAyNCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMjMsCiAgICAgICAgICJlbmRMaW5lIiA6IDI0LAogICAgICAgICAiZW5kQ2hhciIgOiAxMjcsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSwgewogICAgICAgICAibGlicmFyeUlkIiA6ICJUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogNTQsCiAgICAgICAgICJzdGFydENoYXIiIDogNDMsCiAgICAgICAgICJlbmRMaW5lIiA6IDU0LAogICAgICAgICAiZW5kQ2hhciIgOiA0NywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiA1NCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMzIsCiAgICAgICAgICJlbmRMaW5lIiA6IDU0LAogICAgICAgICAiZW5kQ2hhciIgOiAxMzYsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSBdLAogICAgICAiaWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSUNELTEwLUNNIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9sb2luYy5vcmciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInZhbHVlU2V0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvVmFsdWVTZXQiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPbmNvbG9naXN0IiwKICAgICAgICAgICAgImlkIiA6ICIzOTQ1OTIwMDQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlNOT01FRC1DVCIKICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvbnRleHRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAic3RhdGVtZW50cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb2RheSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb2RheSIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29hbGVzY2UiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmZvcm1lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJzZXJ2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZXF1ZXN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIlByYWN0aXRpb25lci8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAicHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUXVhbGlmaWNhdGlvbnMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUXVhbGlmaWNhdGlvbnMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJhY3RpdGlvbmVyUm9sZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInByb2xlIiwKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByYWN0aXRpb25lclJvbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInByb2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJTcGVjaWFsdHkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZXMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3BlY2lhbHR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcmFjdGl0aW9uZXJSb2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlByZWZlcnJlZENvbW11bmljYXRpb24iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmFuayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPcmdOYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJvcmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T3JnYW5pemF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTUQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJNRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFuZCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjIxODMxMjYiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVGhpcmRQYXJ0eUNyZWRlbnRpYWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWYWxpZFR1cmFsaW9DcmVkZW50aWFscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUaGlyZFBhcnR5SXNzdWVyIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9CiAgIH0KfQ==" } ] -} \ No newline at end of file +} From 8acb5776a7545b8d290f65920e6a2afe6634464e Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Fri, 10 Feb 2023 15:41:34 -0500 Subject: [PATCH 76/83] Fix the TIRF Patient Enrollment Prepopulation. --- .../CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json index 2afb8463..b30144cd 100644 --- a/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json +++ b/src/cds-library/CRD-DTR/TIRF/R4/resources/Questionnaire-R4-TIRF.json @@ -9,6 +9,12 @@ ], "date": "2020-05-20", "publisher": "Da Vinci DTR", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/cqf-library", + "valueCanonical": "http://hl7.org/fhir/us/davinci-dtr/Library/BasicPatientInfo-prepopulation" + } + ], "item": [ { "linkId": "1", @@ -811,4 +817,4 @@ ] } ] -} \ No newline at end of file +} From 239c6ede545262ef9943d4255b35008900e366b3 Mon Sep 17 00:00:00 2001 From: Zach Robin Date: Fri, 10 Feb 2023 12:59:56 -0800 Subject: [PATCH 77/83] updated names of iso from ipledge --- src/fhir/utilities.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 21806804..8e4b19a3 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -437,7 +437,7 @@ export class FhirUtilities { ] }, { - name: "IPledge", + name: "Isotretinoin", codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", code: "6064", requirements: [{ @@ -496,7 +496,7 @@ export class FhirUtilities { stakeholderId: "Organization/pharm0111", completed: true, requirementName: "Pharmacist Enrollment", - drugName: "IPledge", + drugName: "Isotretinoin", completedQuestionnaire: null, case_numbers: [], }], (err: any, result: any) => { From 3b947646770abcd6cb4b9adb2de794da63ba3780 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Mon, 13 Feb 2023 12:40:47 -0500 Subject: [PATCH 78/83] Fix the remaining errors for Turalio enrollment forms when unable to find ValueSets. --- .../R4/resources/Library-R4-Turalio-prepopulation.json | 4 ++-- .../Library-R4-TuralioPrescriberEnrollment-prepopulation.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json index 7d0187a0..5aeafdb4 100644 --- a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-Turalio-prepopulation.json @@ -89,11 +89,11 @@ "content": [ { "contentType": "text/cql", - "data": "bGlicmFyeSBUdXJhbGlvUHJlcG9wdWxhdGlvbiAgdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIHZlcnNpb24gJzEuMC4yJyBjYWxsZWQgQ0RTCmluY2x1ZGUgRFRSSGVscGVycyB2ZXJzaW9uICcwLjEuMCcgY2FsbGVkIERUUgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKCnZhbHVlc2V0ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjE5LjE5OCcKdmFsdWVzZXQgIlR1cmFsaW9WYWx1ZVNldCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3JwoKY29kZSAiMjk0NjMtNyI6ICcyOTQ2My03JyBmcm9tICJMT0lOQyIKY29kZSAiMjE4MzEwMiI6ICcyMTgzMTAyJyBmcm9tICJSWE5PUk0iCmNvZGUgIkFTVCI6ICcxOTIwLTgnIGZyb20gIkxPSU5DIgpjb2RlICJBTFQiOiAnMTc0Mi02JyBmcm9tICJMT0lOQyIKY29kZSAiR0dUIjogJzIzMjQtMicgZnJvbSAiTE9JTkMiCmNvZGUgIlRvdGFsQmlsaXJ1YmluIjogJzE5NzUtMicgZnJvbSAiTE9JTkMiCmNvZGUgIkRpcmVjdEJpbGlydWJpbiI6ICcxOTY4LTcnIGZyb20gIkxPSU5DIgpjb2RlICJBTFAiOiAnMTM4NzQtMycgZnJvbSAiTE9JTkMiCmNvZGUgIkFsYnVtaW4iOiAnMTc1MS03JyBmcm9tICJMT0lOQyIKY29kZSAiUFQiOiAnNTkwMi0yJyBmcm9tICJMT0lOQyIKCnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKcGFyYW1ldGVyIG1lZGljYXRpb25fZGlzcGVuc2UgTWVkaWNhdGlvbkRpc3BlbnNlCgpjb250ZXh0IFBhdGllbnQKCi8vIGdldCBvYnNlcnZhdGlvbnMgCmRlZmluZSAiV2VpZ2h0TGlzdCI6IFtPYnNlcnZhdGlvbjogIjI5NDYzLTciXQpkZWZpbmUgIkxhdGVzdFdlaWdodCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoIldlaWdodExpc3QiKSwnbWcnKSkKZGVmaW5lICJMYXRlc3RXZWlnaHRSZXN1bHQiOiBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0V2VpZ2h0IikKCmRlZmluZSAiVHVyYWxpbyI6IFtNZWRpY2F0aW9uU3RhdGVtZW50OiAiVHVyYWxpb1ZhbHVlU2V0Il0KZGVmaW5lICJUYWtpbmdUdXJhbGlvIjogZXhpc3RzKCJUdXJhbGlvIikKZGVmaW5lICJUdXJhbGlvRGF0ZSI6IAogIGlmICJUYWtpbmdUdXJhbGlvIiAKICAgIHRoZW4gRmlyc3QoIlR1cmFsaW8iKS5lZmZlY3RpdmUudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFTVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQVNUIl0pLCAnVS9MJykpCmRlZmluZSAiQVNUUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFTVCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBU1REYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBU1QiKQogICAgdGhlbiAiTGF0ZXN0QVNUIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFMVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQUxUIl0pLCAnVS9MJykpCmRlZmluZSAiQUxUUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFMVCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBTFREYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBTFQiKQogICAgdGhlbiAiTGF0ZXN0QUxUIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEdHVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiR0dUIl0pLCAnVS9MJykpCmRlZmluZSAiR0dUUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEdHVCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJHR1REYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RHR1QiKQogICAgdGhlbiAiTGF0ZXN0R0dUIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdFRvdGFsQmlsaXJ1YmluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJUb3RhbEJpbGlydWJpbiJdKSwgJ21nL2RMJykpCmRlZmluZSAiVG90YWxCaWxpcnViaW5SZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0VG90YWxCaWxpcnViaW4iKSB0byBTdHJpbmcpICsgJyBtZy9kTCcKZGVmaW5lICJUb3RhbEJpbGlydWJpbkRhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdFRvdGFsQmlsaXJ1YmluIikKICAgIHRoZW4gIkxhdGVzdFRvdGFsQmlsaXJ1YmluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdERpcmVjdEJpbGlydWJpbiI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiRGlyZWN0QmlsaXJ1YmluIl0pLCAnbWcvZEwnKSkKZGVmaW5lICJEaXJlY3RCaWxpcnViaW5SZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIikgdG8gU3RyaW5nKSArICcgbWcvZEwnCmRlZmluZSAiRGlyZWN0QmlsaXJ1YmluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIikKICAgIHRoZW4gIkxhdGVzdERpcmVjdEJpbGlydWJpbiIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJMYXRlc3RBTFAiOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIkFMUCJdKSwgJ1UvTCcpKQpkZWZpbmUgIkFMUFJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RBTFAiKSB0byBTdHJpbmcpICsgJyBVL0wnCmRlZmluZSAiQUxQRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0QUxQIikKICAgIHRoZW4gIkxhdGVzdEFMUCIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJMYXRlc3RBbGJ1bWluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBbGJ1bWluIl0pLCAnZy9kTCcpKQpkZWZpbmUgIkFsYnVtaW5SZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QWxidW1pbiIpIHRvIFN0cmluZykgKyAnIGcvZEwnCmRlZmluZSAiQWxidW1pbkRhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFsYnVtaW4iKQogICAgdGhlbiAiTGF0ZXN0QWxidW1pbiIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJMYXRlc3RQVCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiUFQiXSksICdzJykpCmRlZmluZSAiUFRSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0UFQiKSB0byBTdHJpbmcpICsgJyBzJwpkZWZpbmUgIlBURGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0UFQiKQogICAgdGhlbiAiTGF0ZXN0UFQiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTWVkTGlzdCI6IFtNZWRpY2F0aW9uU3RhdGVtZW50XSBNCiAgd2hlcmUgTS5zdGF0dXMudmFsdWUgPSAnYWN0aXZlJwoKZGVmaW5lICJUYWtpbmdNZWRzIjogbm90IGV4aXN0cygiTWVkTGlzdCIpCmRlZmluZSBmdW5jdGlvbiBHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdChNZWRTdGF0ZW1lbnRMaXN0IExpc3Q8TWVkaWNhdGlvblN0YXRlbWVudD4pOgogIGRpc3RpbmN0KAogICAgZmxhdHRlbigKICAgICAgTWVkU3RhdGVtZW50TGlzdCBNZWRTdGF0ZW1lbnQKICAgICAgICBsZXQgTWVkaWNhdGlvbkxpc3Q6CiAgICAgICAgICAoTWVkU3RhdGVtZW50Lm1lZGljYXRpb24uY29kaW5nKSBDT0RJTkcKICAgICAgICAgIHJldHVybiAoRkhJUkhlbHBlcnMuVG9Db2RlKENPRElORykuZGlzcGxheSArICcgLSAnICsgRkhJUkhlbHBlcnMuVG9Db2RlKENPRElORykuY29kZSkKCiAgICAgICAgcmV0dXJuIE1lZGljYXRpb25MaXN0ICAKICAgICkKICApICAgCmRlZmluZSAiTWVkcyI6IEdldE1lZGljYXRpb25zVHVwbGVMaXN0KE1lZExpc3QpCmRlZmluZSAiTWVkc1N0cmluZyI6IAogIE1lZHMgTQogICAgYWdncmVnYXRlIFJlc3VsdCBzdGFydGluZyAnJzogUmVzdWx0ICsgJywgJyArIE0KCmRlZmluZSAiTWVkaWNhbEhpc3RvcnlMaXN0IjogW0NvbmRpdGlvbjogIkhlcGF0aWNNZWRpY2FsSGlzdG9yeSJdCmRlZmluZSAiTWVkaWNhbEhpc3RvcnkiOiBEVFIuQ29kZXNGcm9tQ29uZGl0aW9ucyhDRFMuQ29uZmlybWVkKCJNZWRpY2FsSGlzdG9yeUxpc3QiKSk=" + "data": "bGlicmFyeSBUdXJhbGlvUHJlcG9wdWxhdGlvbiAgdmVyc2lvbiAnMC4xLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjAnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjAnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIENEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIHZlcnNpb24gJzEuMC4yJyBjYWxsZWQgQ0RTCmluY2x1ZGUgRFRSSGVscGVycyB2ZXJzaW9uICcwLjEuMCcgY2FsbGVkIERUUgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKCnZhbHVlc2V0ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiOiAnaHR0cHM6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTgnCnZhbHVlc2V0ICJUdXJhbGlvVmFsdWVTZXQiOiAnaHR0cHM6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTcnCgpjb2RlICIyOTQ2My03IjogJzI5NDYzLTcnIGZyb20gIkxPSU5DIgpjb2RlICIyMTgzMTAyIjogJzIxODMxMDInIGZyb20gIlJYTk9STSIKY29kZSAiQVNUIjogJzE5MjAtOCcgZnJvbSAiTE9JTkMiCmNvZGUgIkFMVCI6ICcxNzQyLTYnIGZyb20gIkxPSU5DIgpjb2RlICJHR1QiOiAnMjMyNC0yJyBmcm9tICJMT0lOQyIKY29kZSAiVG90YWxCaWxpcnViaW4iOiAnMTk3NS0yJyBmcm9tICJMT0lOQyIKY29kZSAiRGlyZWN0QmlsaXJ1YmluIjogJzE5NjgtNycgZnJvbSAiTE9JTkMiCmNvZGUgIkFMUCI6ICcxMzg3NC0zJyBmcm9tICJMT0lOQyIKY29kZSAiQWxidW1pbiI6ICcxNzUxLTcnIGZyb20gIkxPSU5DIgpjb2RlICJQVCI6ICc1OTAyLTInIGZyb20gIkxPSU5DIgoKcGFyYW1ldGVyIG1lZGljYXRpb25fcmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdApwYXJhbWV0ZXIgbWVkaWNhdGlvbl9kaXNwZW5zZSBNZWRpY2F0aW9uRGlzcGVuc2UKCmNvbnRleHQgUGF0aWVudAoKLy8gZ2V0IG9ic2VydmF0aW9ucyAKZGVmaW5lICJXZWlnaHRMaXN0IjogW09ic2VydmF0aW9uOiAiMjk0NjMtNyJdCmRlZmluZSAiTGF0ZXN0V2VpZ2h0IjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZCgiV2VpZ2h0TGlzdCIpLCdtZycpKQpkZWZpbmUgIkxhdGVzdFdlaWdodFJlc3VsdCI6IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RXZWlnaHQiKQoKZGVmaW5lICJUdXJhbGlvIjogW01lZGljYXRpb25TdGF0ZW1lbnQ6ICJUdXJhbGlvVmFsdWVTZXQiXQpkZWZpbmUgIlRha2luZ1R1cmFsaW8iOiBleGlzdHMoIlR1cmFsaW8iKQpkZWZpbmUgIlR1cmFsaW9EYXRlIjogCiAgaWYgIlRha2luZ1R1cmFsaW8iIAogICAgdGhlbiBGaXJzdCgiVHVyYWxpbyIpLmVmZmVjdGl2ZS52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0QVNUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBU1QiXSksICdVL0wnKSkKZGVmaW5lICJBU1RSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QVNUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkFTVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFTVCIpCiAgICB0aGVuICJMYXRlc3RBU1QiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0QUxUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJBTFQiXSksICdVL0wnKSkKZGVmaW5lICJBTFRSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0QUxUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkFMVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEFMVCIpCiAgICB0aGVuICJMYXRlc3RBTFQiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0R0dUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJHR1QiXSksICdVL0wnKSkKZGVmaW5lICJHR1RSZXN1bHQiOiAoY29udmVydCBEVFIuR2V0T2JzZXJ2YXRpb25WYWx1ZSgiTGF0ZXN0R0dUIikgdG8gU3RyaW5nKSArICcgVS9MJwpkZWZpbmUgIkdHVERhdGUiOiAKICBpZiBleGlzdHMoIkxhdGVzdEdHVCIpCiAgICB0aGVuICJMYXRlc3RHR1QiLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0VG90YWxCaWxpcnViaW4iOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIlRvdGFsQmlsaXJ1YmluIl0pLCAnbWcvZEwnKSkKZGVmaW5lICJUb3RhbEJpbGlydWJpblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RUb3RhbEJpbGlydWJpbiIpIHRvIFN0cmluZykgKyAnIG1nL2RMJwpkZWZpbmUgIlRvdGFsQmlsaXJ1YmluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0VG90YWxCaWxpcnViaW4iKQogICAgdGhlbiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLmlzc3VlZC52YWx1ZQogIGVsc2UKICAgIG51bGwKCmRlZmluZSAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJEaXJlY3RCaWxpcnViaW4iXSksICdtZy9kTCcpKQpkZWZpbmUgIkRpcmVjdEJpbGlydWJpblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3REaXJlY3RCaWxpcnViaW4iKSB0byBTdHJpbmcpICsgJyBtZy9kTCcKZGVmaW5lICJEaXJlY3RCaWxpcnViaW5EYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3REaXJlY3RCaWxpcnViaW4iKQogICAgdGhlbiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFMUCI6IENEUy5Nb3N0UmVjZW50KENEUy5XaXRoVW5pdChDRFMuVmVyaWZpZWQoW09ic2VydmF0aW9uOiAiQUxQIl0pLCAnVS9MJykpCmRlZmluZSAiQUxQUmVzdWx0IjogKGNvbnZlcnQgRFRSLkdldE9ic2VydmF0aW9uVmFsdWUoIkxhdGVzdEFMUCIpIHRvIFN0cmluZykgKyAnIFUvTCcKZGVmaW5lICJBTFBEYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RBTFAiKQogICAgdGhlbiAiTGF0ZXN0QUxQIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdEFsYnVtaW4iOiBDRFMuTW9zdFJlY2VudChDRFMuV2l0aFVuaXQoQ0RTLlZlcmlmaWVkKFtPYnNlcnZhdGlvbjogIkFsYnVtaW4iXSksICdnL2RMJykpCmRlZmluZSAiQWxidW1pblJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RBbGJ1bWluIikgdG8gU3RyaW5nKSArICcgZy9kTCcKZGVmaW5lICJBbGJ1bWluRGF0ZSI6IAogIGlmIGV4aXN0cygiTGF0ZXN0QWxidW1pbiIpCiAgICB0aGVuICJMYXRlc3RBbGJ1bWluIi5pc3N1ZWQudmFsdWUKICBlbHNlCiAgICBudWxsCgpkZWZpbmUgIkxhdGVzdFBUIjogQ0RTLk1vc3RSZWNlbnQoQ0RTLldpdGhVbml0KENEUy5WZXJpZmllZChbT2JzZXJ2YXRpb246ICJQVCJdKSwgJ3MnKSkKZGVmaW5lICJQVFJlc3VsdCI6IChjb252ZXJ0IERUUi5HZXRPYnNlcnZhdGlvblZhbHVlKCJMYXRlc3RQVCIpIHRvIFN0cmluZykgKyAnIHMnCmRlZmluZSAiUFREYXRlIjogCiAgaWYgZXhpc3RzKCJMYXRlc3RQVCIpCiAgICB0aGVuICJMYXRlc3RQVCIuaXNzdWVkLnZhbHVlCiAgZWxzZQogICAgbnVsbAoKZGVmaW5lICJNZWRMaXN0IjogW01lZGljYXRpb25TdGF0ZW1lbnRdIE0KICB3aGVyZSBNLnN0YXR1cy52YWx1ZSA9ICdhY3RpdmUnCgpkZWZpbmUgIlRha2luZ01lZHMiOiBub3QgZXhpc3RzKCJNZWRMaXN0IikKZGVmaW5lIGZ1bmN0aW9uIEdldE1lZGljYXRpb25zVHVwbGVMaXN0KE1lZFN0YXRlbWVudExpc3QgTGlzdDxNZWRpY2F0aW9uU3RhdGVtZW50Pik6CiAgZGlzdGluY3QoCiAgICBmbGF0dGVuKAogICAgICBNZWRTdGF0ZW1lbnRMaXN0IE1lZFN0YXRlbWVudAogICAgICAgIGxldCBNZWRpY2F0aW9uTGlzdDoKICAgICAgICAgIChNZWRTdGF0ZW1lbnQubWVkaWNhdGlvbi5jb2RpbmcpIENPRElORwogICAgICAgICAgcmV0dXJuIChGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5kaXNwbGF5ICsgJyAtICcgKyBGSElSSGVscGVycy5Ub0NvZGUoQ09ESU5HKS5jb2RlKQoKICAgICAgICByZXR1cm4gTWVkaWNhdGlvbkxpc3QgIAogICAgKQogICkgICAKZGVmaW5lICJNZWRzIjogR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QoTWVkTGlzdCkKZGVmaW5lICJNZWRzU3RyaW5nIjogCiAgTWVkcyBNCiAgICBhZ2dyZWdhdGUgUmVzdWx0IHN0YXJ0aW5nICcnOiBSZXN1bHQgKyAnLCAnICsgTQoKZGVmaW5lICJNZWRpY2FsSGlzdG9yeUxpc3QiOiBbQ29uZGl0aW9uOiAiSGVwYXRpY01lZGljYWxIaXN0b3J5Il0KZGVmaW5lICJNZWRpY2FsSGlzdG9yeSI6IERUUi5Db2Rlc0Zyb21Db25kaXRpb25zKENEUy5Db25maXJtZWQoIk1lZGljYWxIaXN0b3J5TGlzdCIpKQo=" }, { "contentType": "application/elm+json", - "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImluY2x1ZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAicGF0aCIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiQ0RTIiwKICAgICAgICAgICAgInBhdGgiIDogIkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjEuMC4yIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkRUUiIsCiAgICAgICAgICAgICJwYXRoIiA6ICJEVFJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAicGFyYW1ldGVyVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9kaXNwZW5zZSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvbkRpc3BlbnNlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVTeXN0ZW1zIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIklDRC0xMC1DTSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vbG9pbmMub3JnIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNOT01FRC1DVCIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSWE5PUk0iLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJ2YWx1ZVNldHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSGVwYXRpY01lZGljYWxIaXN0b3J5IiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk4IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlR1cmFsaW9WYWx1ZVNldCIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjE5LjE5NyIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIjI5NDYzLTciLAogICAgICAgICAgICAiaWQiIDogIjI5NDYzLTciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIjIxODMxMDIiLAogICAgICAgICAgICAiaWQiIDogIjIxODMxMDIiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBU1QiLAogICAgICAgICAgICAiaWQiIDogIjE5MjAtOCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxUIiwKICAgICAgICAgICAgImlkIiA6ICIxNzQyLTYiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdHVCIsCiAgICAgICAgICAgICJpZCIgOiAiMjMyNC0yIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpbiIsCiAgICAgICAgICAgICJpZCIgOiAiMTk3NS0yIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJEaXJlY3RCaWxpcnViaW4iLAogICAgICAgICAgICAiaWQiIDogIjE5NjgtNyIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxQIiwKICAgICAgICAgICAgImlkIiA6ICIxMzg3NC0zIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGJ1bWluIiwKICAgICAgICAgICAgImlkIiA6ICIxNzUxLTciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBUIiwKICAgICAgICAgICAgImlkIiA6ICI1OTAyLTIiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29udGV4dHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJzdGF0ZW1lbnRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIldlaWdodExpc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIyOTQ2My03IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFdlaWdodCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldlaWdodExpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIm1nIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RXZWlnaHRSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RXZWlnaHQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpbyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogIm1lZGljYXRpb24iLAogICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogImluIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlR1cmFsaW9WYWx1ZVNldCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJWYWx1ZVNldFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRha2luZ1R1cmFsaW8iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpbyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpb0RhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVGFraW5nVHVyYWxpbyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJlZmZlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZpcnN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFTVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQVNUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBU1RSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBU1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBU1REYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFTVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBU1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQUxUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFRSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFREYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEdHVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR0dUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJHR1RSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RHR1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJHR1REYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEdHVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RHR1QiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFRvdGFsQmlsaXJ1YmluIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2RlUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIm1nL2RMIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpblJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFRvdGFsQmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBtZy9kTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb3RhbEJpbGlydWJpbkRhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdERpcmVjdEJpbGlydWJpbiIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiRGlyZWN0QmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWcvZEwiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkRpcmVjdEJpbGlydWJpblJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdERpcmVjdEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgbWcvZEwiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRGlyZWN0QmlsaXJ1YmluRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3REaXJlY3RCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFAiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudCIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJXaXRoVW5pdCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWZXJpZmllZCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJ+IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFMUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2RlUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIlUvTCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxQUmVzdWx0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE9ic2VydmF0aW9uVmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QUxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBVL0wiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQUxQRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImlzc3VlZCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QUxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBbGJ1bWluIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBbGJ1bWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZy9kTCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWxidW1pblJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFsYnVtaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIGcvZEwiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQWxidW1pbkRhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QWxidW1pbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBbGJ1bWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RQVCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUFQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQVFJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFBUIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBURGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RQVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RQVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkTGlzdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJhY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUYWtpbmdNZWRzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uRGVmIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiRGlzdGluY3QiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGbGF0dGVuIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIk1lZFN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZFN0YXRlbWVudExpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiT3BlcmFuZFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJsZXQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiA6ICJNZWRpY2F0aW9uTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm1lZGljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogIk1lZFN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImRpc3BsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIC0gIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJDT0RJTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkaWNhdGlvbkxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRTdGF0ZW1lbnRMaXN0IiwKICAgICAgICAgICAgICAgIm9wZXJhbmRUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3RUeXBlU3BlY2lmaWVyIiwKICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBdCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1lZHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0TWVkaWNhdGlvbnNUdXBsZUxpc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZExpc3QiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkc1N0cmluZyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZHMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAiYWdncmVnYXRlIiA6IHsKICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIlJlc3VsdCIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUmVzdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5TGV0UmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIsICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJzdGFydGluZyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkaWNhbEhpc3RvcnlMaXN0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLAogICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJpbiIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJIZXBhdGljTWVkaWNhbEhpc3RvcnkiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVmFsdWVTZXRSZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2FsSGlzdG9yeSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJDb2Rlc0Zyb21Db25kaXRpb25zIiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvbmZpcm1lZCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2FsSGlzdG9yeUxpc3QiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9CiAgIH0KfQ==" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0gXSwKICAgICAgImlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogIlR1cmFsaW9QcmVwb3B1bGF0aW9uIiwKICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICB9LAogICAgICAic2NoZW1hSWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAidXJuOmhsNy1vcmc6ZWxtIiwKICAgICAgICAgInZlcnNpb24iIDogInIxIgogICAgICB9LAogICAgICAidXNpbmdzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiU3lzdGVtIiwKICAgICAgICAgICAgInVyaSIgOiAidXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVIiLAogICAgICAgICAgICAidXJpIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImluY2x1ZGVzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAicGF0aCIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAidmVyc2lvbiIgOiAiNC4wLjAiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgImxvY2FsSWRlbnRpZmllciIgOiAiQ0RTIiwKICAgICAgICAgICAgInBhdGgiIDogIkNEU19Db25uZWN0X0NvbW1vbnNfZm9yX0ZISVJ2NDAwIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjEuMC4yIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkRUUiIsCiAgICAgICAgICAgICJwYXRoIiA6ICJEVFJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjAuMS4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9yZXF1ZXN0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAicGFyYW1ldGVyVHlwZVNwZWNpZmllciIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uUmVxdWVzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAibWVkaWNhdGlvbl9kaXNwZW5zZSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvbkRpc3BlbnNlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvZGVTeXN0ZW1zIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIklDRC0xMC1DTSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vbG9pbmMub3JnIiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlNOT01FRC1DVCIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3Nub21lZC5pbmZvL3NjdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJSWE5PUk0iLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJ2YWx1ZVNldHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSGVwYXRpY01lZGljYWxIaXN0b3J5IiwKICAgICAgICAgICAgImlkIiA6ICJodHRwczovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjE5LjE5OCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvVmFsdWVTZXQiLAogICAgICAgICAgICAiaWQiIDogImh0dHBzOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiMjk0NjMtNyIsCiAgICAgICAgICAgICJpZCIgOiAiMjk0NjMtNyIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiMjE4MzEwMiIsCiAgICAgICAgICAgICJpZCIgOiAiMjE4MzEwMiIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiUlhOT1JNIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFTVCIsCiAgICAgICAgICAgICJpZCIgOiAiMTkyMC04IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFQiLAogICAgICAgICAgICAiaWQiIDogIjE3NDItNiIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiR0dUIiwKICAgICAgICAgICAgImlkIiA6ICIyMzI0LTIiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvdGFsQmlsaXJ1YmluIiwKICAgICAgICAgICAgImlkIiA6ICIxOTc1LTIiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkRpcmVjdEJpbGlydWJpbiIsCiAgICAgICAgICAgICJpZCIgOiAiMTk2OC03IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJMT0lOQyIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFAiLAogICAgICAgICAgICAiaWQiIDogIjEzODc0LTMiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkxPSU5DIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFsYnVtaW4iLAogICAgICAgICAgICAiaWQiIDogIjE3NTEtNyIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUFQiLAogICAgICAgICAgICAiaWQiIDogIjU5MDItMiIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImNvZGVTeXN0ZW0iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiCiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJjb250ZXh0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInN0YXRlbWVudHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiV2VpZ2h0TGlzdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJ+IiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIjI5NDYzLTciLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0V2VpZ2h0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2VpZ2h0TGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWciLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFdlaWdodFJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFdlaWdodCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1NZWRpY2F0aW9uU3RhdGVtZW50IiwKICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAibWVkaWNhdGlvbiIsCiAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAiaW4iLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVHVyYWxpb1ZhbHVlU2V0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlZhbHVlU2V0UmVmIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVGFraW5nVHVyYWxpbyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUYWtpbmdUdXJhbGlvIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInRoZW4iIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImVmZmVjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRmlyc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlR1cmFsaW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QVNUIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBU1QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJVL0wiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFTVFJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFTVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgVS9MIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFTVERhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QVNUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFTVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QUxUIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJBTFQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJVL0wiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFMVFJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgVS9MIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkFMVERhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QUxUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0R0dUIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHR1QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJVL0wiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdHVFJlc3VsdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRPYnNlcnZhdGlvblZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJEVFIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEdHVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgVS9MIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkdHVERhdGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiSWYiLAogICAgICAgICAgICAgICAiY29uZGl0aW9uIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1Cb29sZWFuIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0R0dUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEdHVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudCIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJXaXRoVW5pdCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWZXJpZmllZCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJ+IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvdGFsQmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWcvZEwiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvdGFsQmlsaXJ1YmluUmVzdWx0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE9ic2VydmF0aW9uVmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0VG90YWxCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIG1nL2RMIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRvdGFsQmlsaXJ1YmluRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RUb3RhbEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RUb3RhbEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgImVsc2UiIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfURhdGVUaW1lIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTnVsbCIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJEaXJlY3RCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJtZy9kTCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiRGlyZWN0QmlsaXJ1YmluUmVzdWx0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE9ic2VydmF0aW9uVmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0RGlyZWN0QmlsaXJ1YmluIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiBtZy9kTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJEaXJlY3RCaWxpcnViaW5EYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdERpcmVjdEJpbGlydWJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3REaXJlY3RCaWxpcnViaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMUCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJNb3N0UmVjZW50IiwKICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIldpdGhVbml0IiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZlcmlmaWVkIiwKICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1PYnNlcnZhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogIn4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZXMiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiVG9MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQUxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvZGVSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiVS9MIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFBSZXN1bHQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiR2V0T2JzZXJ2YXRpb25WYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRFRSIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFAiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIFUvTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBTFBEYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFMUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAidGhlbiIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVkIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBTFAiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFsYnVtaW4iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAiTW9zdFJlY2VudCIsCiAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJXaXRoVW5pdCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWZXJpZmllZCIsCiAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiQ0RTIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T2JzZXJ2YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiY29kZVByb3BlcnR5IiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVDb21wYXJhdG9yIiA6ICJ+IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkFsYnVtaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29kZVJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJnL2RMIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGJ1bWluUmVzdWx0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE9ic2VydmF0aW9uVmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0QWxidW1pbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgZy9kTCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJBbGJ1bWluRGF0ZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJZiIsCiAgICAgICAgICAgICAgICJjb25kaXRpb24iIDogewogICAgICAgICAgICAgICAgICAiYXNUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJMYXRlc3RBbGJ1bWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdEFsYnVtaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJlbHNlIiA6IHsKICAgICAgICAgICAgICAgICAgImFzVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1EYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk51bGwiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFBUIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1vc3RSZWNlbnQiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiV2l0aFVuaXQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmVyaWZpZWQiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkNEUyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9ic2VydmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImNvZGVQcm9wZXJ0eSIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlQ29tcGFyYXRvciIgOiAifiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb2RlUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogInMiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBUUmVzdWx0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkdldE9ic2VydmF0aW9uVmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTGF0ZXN0UFQiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiIHMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUFREYXRlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIklmIiwKICAgICAgICAgICAgICAgImNvbmRpdGlvbiIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9Qm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFBUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJ0aGVuIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZWQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkxhdGVzdFBUIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAiZWxzZSIgOiB7CiAgICAgICAgICAgICAgICAgICJhc1R5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9RGF0ZVRpbWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQXMiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOdWxsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRMaXN0IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU1lZGljYXRpb25TdGF0ZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImFjdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRha2luZ01lZHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhpc3RzIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25EZWYiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJEaXN0aW5jdCIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZsYXR0ZW4iLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiTWVkU3RhdGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkU3RhdGVtZW50TGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJPcGVyYW5kUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgImxldCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkZW50aWZpZXIiIDogIk1lZGljYXRpb25MaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibWVkaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiTWVkU3RhdGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJDb25jYXRlbmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZGlzcGxheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9Db2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ09ESU5HIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIgLSAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkNPRElORyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2F0aW9uTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeUxldFJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZFN0YXRlbWVudExpc3QiLAogICAgICAgICAgICAgICAib3BlcmFuZFR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdFR5cGVTcGVjaWZpZXIiLAogICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblN0YXRlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IF0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTWVkcyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJHZXRNZWRpY2F0aW9uc1R1cGxlTGlzdCIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkTGlzdCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRzU3RyaW5nIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiTWVkcyIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJhZ2dyZWdhdGUiIDogewogICAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIgOiAiUmVzdWx0IiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJSZXN1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnlMZXRSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiwgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgInN0YXJ0aW5nIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJNZWRpY2FsSGlzdG9yeUxpc3QiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICJjb2RlUHJvcGVydHkiIDogImNvZGUiLAogICAgICAgICAgICAgICAiY29kZUNvbXBhcmF0b3IiIDogImluIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIiwKICAgICAgICAgICAgICAgImNvZGVzIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIkhlcGF0aWNNZWRpY2FsSGlzdG9yeSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJWYWx1ZVNldFJlZiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1lZGljYWxIaXN0b3J5IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIkNvZGVzRnJvbUNvbmRpdGlvbnMiLAogICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkRUUiIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiQ29uZmlybWVkIiwKICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJDRFMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk1lZGljYWxIaXN0b3J5TGlzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0KICAgfQp9" } ] } diff --git a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json index 5ededaaa..00d38fba 100644 --- a/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json +++ b/src/cds-library/CRD-DTR/Turalio/R4/resources/Library-R4-TuralioPrescriberEnrollment-prepopulation.json @@ -103,11 +103,11 @@ "content": [ { "contentType": "text/cql", - "data": "bGlicmFyeSBUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uICB2ZXJzaW9uICcwLjEuMCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMCcKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKdmFsdWVzZXQgIlR1cmFsaW9WYWx1ZVNldCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3JwoKCmNvZGUgIk9uY29sb2dpc3QiOiczOTQ1OTIwMDQnIGZyb20gIlNOT01FRC1DVCIKCnBhcmFtZXRlciBkZXZpY2VfcmVxdWVzdCBEZXZpY2VSZXF1ZXN0CnBhcmFtZXRlciBzZXJ2aWNlX3JlcXVlc3QgU2VydmljZVJlcXVlc3QKcGFyYW1ldGVyIG1lZGljYXRpb25fcmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdAoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgVG9kYXk6IFRvZGF5KCkKCmRlZmluZSAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIjogQ29hbGVzY2UoZGV2aWNlX3JlcXVlc3QucGVyZm9ybWVyLnJlZmVyZW5jZS52YWx1ZSwgc2VydmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIG1lZGljYXRpb25fcmVxdWVzdC5yZXF1ZXN0ZXIucmVmZXJlbmNlLnZhbHVlKQovLyBHZXQgUHJhY3RpdGlvbmVyCmRlZmluZSBPcmRlcmluZ1Byb3ZpZGVyOiBzaW5nbGV0b24gZnJvbSAoCiAgW1ByYWN0aXRpb25lcl0gcHJhY3RpdGlvbmVyCiAgICB3aGVyZSAoJ1ByYWN0aXRpb25lci8nICsgcHJhY3RpdGlvbmVyLmlkKSA9ICBTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UpCgpkZWZpbmUgUXVhbGlmaWNhdGlvbnM6IHNpbmdsZXRvbiBmcm9tICgKICAgICJPcmRlcmluZ1Byb3ZpZGVyIi5xdWFsaWZpY2F0aW9uWzBdLmNvZGUuY29kaW5nWzBdLmNvZGUudmFsdWUpCgpkZWZpbmUgQ3JlZGVudGlhbHM6IHtRdWFsaWZpY2F0aW9uc30KCmRlZmluZSBQcmFjdGl0aW9uZXJSb2xlOiBzaW5nbGV0b24gZnJvbSAoCiAgW1ByYWN0aXRpb25lclJvbGVdIHByb2xlCiAgICB3aGVyZSAocHJvbGUucHJhY3RpdGlvbmVyLnJlZmVyZW5jZS52YWx1ZSkgPSBTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UpCgpkZWZpbmUgU3BlY2lhbHR5OiAgRkhJUkhlbHBlcnMuVG9Db25jZXB0KCJQcmFjdGl0aW9uZXJSb2xlIi5zcGVjaWFsdHlbMF0gYXMgRkhJUi5Db2RlYWJsZUNvbmNlcHQpLmNvZGVzCgpkZWZpbmUgUHJlZmVycmVkQ29tbXVuaWNhdGlvbjogeyhzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLnRlbGVjb20gdGVsZWNvbSB3aGVyZSB0ZWxlY29tLnJhbmsudmFsdWUgPSAxKSkuc3lzdGVtLnZhbHVlfQoKZGVmaW5lIE9yZ05hbWU6IChbT3JnYW5pemF0aW9uXSBvcmcpLm5hbWUudmFsdWUKCmRlZmluZSBNRDogKHNpbmdsZXRvbiBmcm9tICgKICAiT3JkZXJpbmdQcm92aWRlciIuaWRlbnRpZmllciBpZGVudGlmaWVyCiAgICB3aGVyZSBpZGVudGlmaWVyLnR5cGUuY29kaW5nWzBdLmNvZGUgPSAnTUQnKSkudmFsdWUudmFsdWUKCgovL3JldHJpZXZlIGEgY29sbGVjdGlvbiBvZiBpbnN0YW5jZXMgdGhhdCBhbGlnbiB3aXRoIFR1cmFsaW8gcHJlc2NyaWJlciBjZXJ0aWZpY2F0aW9uCmRlZmluZSBWYWxpZFR1cmFsaW9DcmVkZW50aWFsczogCiAgZnJvbSAiT3JkZXJpbmdQcm92aWRlciIucXVhbGlmaWNhdGlvbiBxdWFsaWZpY2F0aW9uIAogICAgd2hlcmUgcXVhbGlmaWNhdGlvbi5pZGVudGlmaWVyLnN5c3RlbS52YWx1ZSA9ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJyBhbmQgcXVhbGlmaWNhdGlvbi5pZGVudGlmaWVyLnZhbHVlLnZhbHVlID0gJzIxODMxMjYnCgovL3doZW4gZW1wdHksIGFsbCBhY2Nlc3NlcyBhcmUgbnVsbCBhbmQgc28gcHJlcG9wdWxhdGlvbiB3aWxsIGJlIGJsYW5rCmRlZmluZSBUaGlyZFBhcnR5Q3JlZGVudGlhbHM6IFZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzWzBdLmNvZGUudGV4dC52YWx1ZQpkZWZpbmUgVGhpcmRQYXJ0eUlzc3VlcjogVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHNbMF0uaXNzdWVyLmRpc3BsYXkudmFsdWUKCgoKCg==" + "data": "bGlicmFyeSBUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uICB2ZXJzaW9uICcwLjEuMCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMCcKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMCcgY2FsbGVkIEZISVJIZWxwZXJzCgoKY29kZXN5c3RlbSAiSUNELTEwLUNNIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvc2lkL2ljZC0xMC1jbScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVELUNUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJYTk9STSI6ICdodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtJwoKdmFsdWVzZXQgIlR1cmFsaW9WYWx1ZVNldCI6ICdodHRwczovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjE5LjE5NycKCgpjb2RlICJPbmNvbG9naXN0IjonMzk0NTkyMDA0JyBmcm9tICJTTk9NRUQtQ1QiCgpwYXJhbWV0ZXIgZGV2aWNlX3JlcXVlc3QgRGV2aWNlUmVxdWVzdApwYXJhbWV0ZXIgc2VydmljZV9yZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0CnBhcmFtZXRlciBtZWRpY2F0aW9uX3JlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lIFRvZGF5OiBUb2RheSgpCgpkZWZpbmUgIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSI6IENvYWxlc2NlKGRldmljZV9yZXF1ZXN0LnBlcmZvcm1lci5yZWZlcmVuY2UudmFsdWUsIHNlcnZpY2VfcmVxdWVzdC5wZXJmb3JtZXIucmVmZXJlbmNlLnZhbHVlLCBtZWRpY2F0aW9uX3JlcXVlc3QucmVxdWVzdGVyLnJlZmVyZW5jZS52YWx1ZSkKLy8gR2V0IFByYWN0aXRpb25lcgpkZWZpbmUgT3JkZXJpbmdQcm92aWRlcjogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJdIHByYWN0aXRpb25lcgogICAgd2hlcmUgKCdQcmFjdGl0aW9uZXIvJyArIHByYWN0aXRpb25lci5pZCkgPSAgU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKZGVmaW5lIFF1YWxpZmljYXRpb25zOiBzaW5nbGV0b24gZnJvbSAoCiAgICAiT3JkZXJpbmdQcm92aWRlciIucXVhbGlmaWNhdGlvblswXS5jb2RlLmNvZGluZ1swXS5jb2RlLnZhbHVlKQoKZGVmaW5lIENyZWRlbnRpYWxzOiB7UXVhbGlmaWNhdGlvbnN9CgpkZWZpbmUgUHJhY3RpdGlvbmVyUm9sZTogc2luZ2xldG9uIGZyb20gKAogIFtQcmFjdGl0aW9uZXJSb2xlXSBwcm9sZQogICAgd2hlcmUgKHByb2xlLnByYWN0aXRpb25lci5yZWZlcmVuY2UudmFsdWUpID0gU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlKQoKZGVmaW5lIFNwZWNpYWx0eTogIEZISVJIZWxwZXJzLlRvQ29uY2VwdCgiUHJhY3RpdGlvbmVyUm9sZSIuc3BlY2lhbHR5WzBdIGFzIEZISVIuQ29kZWFibGVDb25jZXB0KS5jb2RlcwoKZGVmaW5lIFByZWZlcnJlZENvbW11bmljYXRpb246IHsoc2luZ2xldG9uIGZyb20gKAogICJPcmRlcmluZ1Byb3ZpZGVyIi50ZWxlY29tIHRlbGVjb20gd2hlcmUgdGVsZWNvbS5yYW5rLnZhbHVlID0gMSkpLnN5c3RlbS52YWx1ZX0KCmRlZmluZSBPcmdOYW1lOiAoW09yZ2FuaXphdGlvbl0gb3JnKS5uYW1lLnZhbHVlCgpkZWZpbmUgTUQ6IChzaW5nbGV0b24gZnJvbSAoCiAgIk9yZGVyaW5nUHJvdmlkZXIiLmlkZW50aWZpZXIgaWRlbnRpZmllcgogICAgd2hlcmUgaWRlbnRpZmllci50eXBlLmNvZGluZ1swXS5jb2RlID0gJ01EJykpLnZhbHVlLnZhbHVlCgoKLy9yZXRyaWV2ZSBhIGNvbGxlY3Rpb24gb2YgaW5zdGFuY2VzIHRoYXQgYWxpZ24gd2l0aCBUdXJhbGlvIHByZXNjcmliZXIgY2VydGlmaWNhdGlvbgpkZWZpbmUgVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHM6IAogIGZyb20gIk9yZGVyaW5nUHJvdmlkZXIiLnF1YWxpZmljYXRpb24gcXVhbGlmaWNhdGlvbiAKICAgIHdoZXJlIHF1YWxpZmljYXRpb24uaWRlbnRpZmllci5zeXN0ZW0udmFsdWUgPSAnaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybScgYW5kIHF1YWxpZmljYXRpb24uaWRlbnRpZmllci52YWx1ZS52YWx1ZSA9ICcyMTgzMTI2JwoKLy93aGVuIGVtcHR5LCBhbGwgYWNjZXNzZXMgYXJlIG51bGwgYW5kIHNvIHByZXBvcHVsYXRpb24gd2lsbCBiZSBibGFuawpkZWZpbmUgVGhpcmRQYXJ0eUNyZWRlbnRpYWxzOiBWYWxpZFR1cmFsaW9DcmVkZW50aWFsc1swXS5jb2RlLnRleHQudmFsdWUKZGVmaW5lIFRoaXJkUGFydHlJc3N1ZXI6IFZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzWzBdLmlzc3Vlci5kaXNwbGF5LnZhbHVlCgoKCgo=" }, { "contentType": "application/elm+json", - "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJsaWJyYXJ5VmVyc2lvbiIgOiAiMC4xLjAiLAogICAgICAgICAic3RhcnRMaW5lIiA6IDI0LAogICAgICAgICAic3RhcnRDaGFyIiA6IDEyMywKICAgICAgICAgImVuZExpbmUiIDogMjQsCiAgICAgICAgICJlbmRDaGFyIiA6IDEyNywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiAyNCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMjMsCiAgICAgICAgICJlbmRMaW5lIiA6IDI0LAogICAgICAgICAiZW5kQ2hhciIgOiAxMjcsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSwgewogICAgICAgICAibGlicmFyeUlkIiA6ICJUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogNTQsCiAgICAgICAgICJzdGFydENoYXIiIDogNDMsCiAgICAgICAgICJlbmRMaW5lIiA6IDU0LAogICAgICAgICAiZW5kQ2hhciIgOiA0NywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiA1NCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMzIsCiAgICAgICAgICJlbmRMaW5lIiA6IDU0LAogICAgICAgICAiZW5kQ2hhciIgOiAxMzYsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSBdLAogICAgICAiaWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSUNELTEwLUNNIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9sb2luYy5vcmciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInZhbHVlU2V0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvVmFsdWVTZXQiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTIxOS4xOTciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJjb2RlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPbmNvbG9naXN0IiwKICAgICAgICAgICAgImlkIiA6ICIzOTQ1OTIwMDQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJjb2RlU3lzdGVtIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIlNOT01FRC1DVCIKICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgImNvbnRleHRzIiA6IHsKICAgICAgICAgImRlZiIgOiBbIHsKICAgICAgICAgICAgIm5hbWUiIDogIlBhdGllbnQiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAic3RhdGVtZW50cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVBhdGllbnQiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUb2RheSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb2RheSIKICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiQ29hbGVzY2UiLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmZvcm1lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicGVyZm9ybWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJzZXJ2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJyZXF1ZXN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQYXJhbWV0ZXJSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQ29uY2F0ZW5hdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIlByYWN0aXRpb25lci8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVG9TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAicHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUXVhbGlmaWNhdGlvbnMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlRvTGlzdCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUXVhbGlmaWNhdGlvbnMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiUHJhY3RpdGlvbmVyUm9sZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogInByb2xlIiwKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByYWN0aXRpb25lclJvbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUmV0cmlldmUiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwcmFjdGl0aW9uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInByb2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJTcGVjaWFsdHkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZXMiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFzIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAic3BlY2lhbHR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJQcmFjdGl0aW9uZXJSb2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJhc1R5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29kZWFibGVDb25jZXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5hbWVkVHlwZVNwZWNpZmllciIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlByZWZlcnJlZENvbW11bmljYXRpb24iLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiTGlzdCIsCiAgICAgICAgICAgICAgICJlbGVtZW50IiA6IFsgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJ0ZWxlY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmFuayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPcmdOYW1lIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJvcmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhVHlwZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9T3JnYW5pemF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTUQiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJNRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFuZCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInN5c3RlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjIxODMxMjYiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVGhpcmRQYXJ0eUNyZWRlbnRpYWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWYWxpZFR1cmFsaW9DcmVkZW50aWFscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUaGlyZFBhcnR5SXNzdWVyIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJkaXNwbGF5IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJpc3N1ZXIiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlZhbGlkVHVyYWxpb0NyZWRlbnRpYWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9CiAgIH0KfQ==" + "data": "ewogICAibGlicmFyeSIgOiB7CiAgICAgICJhbm5vdGF0aW9uIiA6IFsgewogICAgICAgICAidHJhbnNsYXRvck9wdGlvbnMiIDogIkVuYWJsZURhdGVSYW5nZU9wdGltaXphdGlvbiIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUluZm8iCiAgICAgIH0sIHsKICAgICAgICAgImxpYnJhcnlJZCIgOiAiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJsaWJyYXJ5VmVyc2lvbiIgOiAiMC4xLjAiLAogICAgICAgICAic3RhcnRMaW5lIiA6IDI0LAogICAgICAgICAic3RhcnRDaGFyIiA6IDEyMywKICAgICAgICAgImVuZExpbmUiIDogMjQsCiAgICAgICAgICJlbmRDaGFyIiA6IDEyNywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiAyNCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMjMsCiAgICAgICAgICJlbmRMaW5lIiA6IDI0LAogICAgICAgICAiZW5kQ2hhciIgOiAxMjcsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSwgewogICAgICAgICAibGlicmFyeUlkIiA6ICJUdXJhbGlvUHJlc2NyaWJlckVucm9sbG1lbnRQcmVwb3B1bGF0aW9uIiwKICAgICAgICAgImxpYnJhcnlWZXJzaW9uIiA6ICIwLjEuMCIsCiAgICAgICAgICJzdGFydExpbmUiIDogNTQsCiAgICAgICAgICJzdGFydENoYXIiIDogNDMsCiAgICAgICAgICJlbmRMaW5lIiA6IDU0LAogICAgICAgICAiZW5kQ2hhciIgOiA0NywKICAgICAgICAgIm1lc3NhZ2UiIDogIkxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiwKICAgICAgICAgImVycm9yVHlwZSIgOiAic2VtYW50aWMiLAogICAgICAgICAiZXJyb3JTZXZlcml0eSIgOiAid2FybmluZyIsCiAgICAgICAgICJ0eXBlIiA6ICJDcWxUb0VsbUVycm9yIgogICAgICB9LCB7CiAgICAgICAgICJsaWJyYXJ5SWQiIDogIlR1cmFsaW9QcmVzY3JpYmVyRW5yb2xsbWVudFByZXBvcHVsYXRpb24iLAogICAgICAgICAibGlicmFyeVZlcnNpb24iIDogIjAuMS4wIiwKICAgICAgICAgInN0YXJ0TGluZSIgOiA1NCwKICAgICAgICAgInN0YXJ0Q2hhciIgOiAxMzIsCiAgICAgICAgICJlbmRMaW5lIiA6IDU0LAogICAgICAgICAiZW5kQ2hhciIgOiAxMzYsCiAgICAgICAgICJtZXNzYWdlIiA6ICJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIsCiAgICAgICAgICJlcnJvclR5cGUiIDogInNlbWFudGljIiwKICAgICAgICAgImVycm9yU2V2ZXJpdHkiIDogIndhcm5pbmciLAogICAgICAgICAidHlwZSIgOiAiQ3FsVG9FbG1FcnJvciIKICAgICAgfSBdLAogICAgICAiaWRlbnRpZmllciIgOiB7CiAgICAgICAgICJpZCIgOiAiVHVyYWxpb1ByZXNjcmliZXJFbnJvbGxtZW50UHJlcG9wdWxhdGlvbiIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICIwLjEuMCIKICAgICAgfSwKICAgICAgInNjaGVtYUlkZW50aWZpZXIiIDogewogICAgICAgICAiaWQiIDogInVybjpobDctb3JnOmVsbSIsCiAgICAgICAgICJ2ZXJzaW9uIiA6ICJyMSIKICAgICAgfSwKICAgICAgInVzaW5ncyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIlN5c3RlbSIsCiAgICAgICAgICAgICJ1cmkiIDogInVybjpobDctb3JnOmVsbS10eXBlczpyMSIKICAgICAgICAgfSwgewogICAgICAgICAgICAibG9jYWxJZGVudGlmaWVyIiA6ICJGSElSIiwKICAgICAgICAgICAgInVyaSIgOiAiaHR0cDovL2hsNy5vcmcvZmhpciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIiA6ICI0LjAuMCIKICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJpbmNsdWRlcyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJsb2NhbElkZW50aWZpZXIiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInBhdGgiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iIDogIjQuMC4wIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInBhcmFtZXRlcnMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiZGV2aWNlX3JlcXVlc3QiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfURldmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogInNlcnZpY2VfcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9U2VydmljZVJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIm1lZGljYXRpb25fcmVxdWVzdCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgInBhcmFtZXRlclR5cGVTcGVjaWZpZXIiIDogewogICAgICAgICAgICAgICAibmFtZSIgOiAie2h0dHA6Ly9obDcub3JnL2ZoaXJ9TWVkaWNhdGlvblJlcXVlc3QiLAogICAgICAgICAgICAgICAidHlwZSIgOiAiTmFtZWRUeXBlU3BlY2lmaWVyIgogICAgICAgICAgICB9CiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZVN5c3RlbXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiSUNELTEwLUNNIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vaGw3Lm9yZy9maGlyL3NpZC9pY2QtMTAtY20iLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiTE9JTkMiLAogICAgICAgICAgICAiaWQiIDogImh0dHA6Ly9sb2luYy5vcmciLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIKICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU05PTUVELUNUIiwKICAgICAgICAgICAgImlkIiA6ICJodHRwOi8vc25vbWVkLmluZm8vc2N0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlJYTk9STSIsCiAgICAgICAgICAgICJpZCIgOiAiaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybSIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInZhbHVlU2V0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJUdXJhbGlvVmFsdWVTZXQiLAogICAgICAgICAgICAiaWQiIDogImh0dHBzOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyMTkuMTk3IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiCiAgICAgICAgIH0gXQogICAgICB9LAogICAgICAiY29kZXMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiT25jb2xvZ2lzdCIsCiAgICAgICAgICAgICJpZCIgOiAiMzk0NTkyMDA0IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiY29kZVN5c3RlbSIgOiB7CiAgICAgICAgICAgICAgICJuYW1lIiA6ICJTTk9NRUQtQ1QiCiAgICAgICAgICAgIH0KICAgICAgICAgfSBdCiAgICAgIH0sCiAgICAgICJjb250ZXh0cyIgOiB7CiAgICAgICAgICJkZWYiIDogWyB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQYXRpZW50IgogICAgICAgICB9IF0KICAgICAgfSwKICAgICAgInN0YXRlbWVudHMiIDogewogICAgICAgICAiZGVmIiA6IFsgewogICAgICAgICAgICAibmFtZSIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QYXRpZW50IiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVG9kYXkiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiVG9kYXkiCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU2lnbmluZ1Byb3ZpZGVyUmVmZXJlbmNlIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkNvYWxlc2NlIiwKICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJwZXJmb3JtZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogImRldmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInBlcmZvcm1lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAic2VydmljZV9yZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlBhcmFtZXRlclJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicmVxdWVzdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJtZWRpY2F0aW9uX3JlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUGFyYW1ldGVyUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAicHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfVByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdLAogICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXF1YWwiLAogICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkNvbmNhdGVuYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJQcmFjdGl0aW9uZXIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlRvU3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnlOYW1lIiA6ICJGSElSSGVscGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJGdW5jdGlvblJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInByYWN0aXRpb25lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJTaWduaW5nUHJvdmlkZXJSZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlF1YWxpZmljYXRpb25zIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJUb0xpc3QiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJxdWFsaWZpY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJPcmRlcmluZ1Byb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIkNyZWRlbnRpYWxzIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3QiLAogICAgICAgICAgICAgICAiZWxlbWVudCIgOiBbIHsKICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlF1YWxpZmljYXRpb25zIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkV4cHJlc3Npb25SZWYiCiAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlByYWN0aXRpb25lclJvbGUiLAogICAgICAgICAgICAiY29udGV4dCIgOiAiUGF0aWVudCIsCiAgICAgICAgICAgICJhY2Nlc3NMZXZlbCIgOiAiUHVibGljIiwKICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJwcm9sZSIsCiAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFUeXBlIiA6ICJ7aHR0cDovL2hsNy5vcmcvZmhpcn1QcmFjdGl0aW9uZXJSb2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlJldHJpZXZlIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAicHJhY3RpdGlvbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjb3BlIiA6ICJwcm9sZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIlNpZ25pbmdQcm92aWRlclJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiU3BlY2lhbHR5IiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGVzIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb0NvbmNlcHQiLAogICAgICAgICAgICAgICAgICAibGlicmFyeU5hbWUiIDogIkZISVJIZWxwZXJzIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkZ1bmN0aW9uUmVmIiwKICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBcyIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInNwZWNpYWx0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiUHJhY3RpdGlvbmVyUm9sZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1JbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAiYXNUeXBlU3BlY2lmaWVyIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfUNvZGVhYmxlQ29uY2VwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOYW1lZFR5cGVTcGVjaWZpZXIiCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJQcmVmZXJyZWRDb21tdW5pY2F0aW9uIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInR5cGUiIDogIkxpc3QiLAogICAgICAgICAgICAgICAiZWxlbWVudCIgOiBbIHsKICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzeXN0ZW0iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlNpbmdsZXRvbkZyb20iLAogICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAidGVsZWNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFcXVhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInJhbmsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUiIDogInRlbGVjb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiT3JnTmFtZSIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAib3JnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVR5cGUiIDogIntodHRwOi8vaGw3Lm9yZy9maGlyfU9yZ2FuaXphdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJSZXRyaWV2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGlvbnNoaXAiIDogWyBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAid2hlcmUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSXNOdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIk1EIiwKICAgICAgICAgICAgImNvbnRleHQiIDogIlBhdGllbnQiLAogICAgICAgICAgICAiYWNjZXNzTGV2ZWwiIDogIlB1YmxpYyIsCiAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiU2luZ2xldG9uRnJvbSIsCiAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzIiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiT3JkZXJpbmdQcm92aWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBdLAogICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpb25zaGlwIiA6IFsgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJUb1N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5TmFtZSIgOiAiRkhJUkhlbHBlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRnVuY3Rpb25SZWYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkluZGV4ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogImNvZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfVN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiTUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9LCB7CiAgICAgICAgICAgICJuYW1lIiA6ICJWYWxpZFR1cmFsaW9DcmVkZW50aWFscyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJRdWVyeSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogWyB7CiAgICAgICAgICAgICAgICAgICJhbGlhcyIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInF1YWxpZmljYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIk9yZGVyaW5nUHJvdmlkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgInJlbGF0aW9uc2hpcCIgOiBbIF0sCiAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbmQiLAogICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiBbIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzeXN0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RpbmN0IiA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJzeXN0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIk5vdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIklzTnVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXN0aW5jdCIgOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAidmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkFsaWFzUmVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlVHlwZSIgOiAie3VybjpobDctb3JnOmVsbS10eXBlczpyMX1TdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogImh0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0iLAogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkVxdWFsIiwKICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJTaW5nbGV0b25Gcm9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXMiIDogIiR0aGlzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY29wZSIgOiAicXVhbGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJOb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJc051bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiJHRoaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiQWxpYXNSZWYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4iIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzdGluY3QiIDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiIDogInZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICIkdGhpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJBbGlhc1JlZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiA6ICIyMTgzMTI2IiwKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIkxpdGVyYWwiCiAgICAgICAgICAgICAgICAgICAgIH0gXQogICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sIHsKICAgICAgICAgICAgIm5hbWUiIDogIlRoaXJkUGFydHlDcmVkZW50aWFscyIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiSW5kZXhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYW5kIiA6IFsgewogICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiAiVmFsaWRUdXJhbGlvQ3JlZGVudGlhbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiRXhwcmVzc2lvblJlZiIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVUeXBlIiA6ICJ7dXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxfUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiIDogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgOiAiTGl0ZXJhbCIKICAgICAgICAgICAgICAgICAgICAgICAgfSBdCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwgewogICAgICAgICAgICAibmFtZSIgOiAiVGhpcmRQYXJ0eUlzc3VlciIsCiAgICAgICAgICAgICJjb250ZXh0IiA6ICJQYXRpZW50IiwKICAgICAgICAgICAgImFjY2Vzc0xldmVsIiA6ICJQdWJsaWMiLAogICAgICAgICAgICAiZXhwcmVzc2lvbiIgOiB7CiAgICAgICAgICAgICAgICJwYXRoIiA6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAicGF0aCIgOiAiZGlzcGxheSIsCiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICJzb3VyY2UiIDogewogICAgICAgICAgICAgICAgICAgICAicGF0aCIgOiAiaXNzdWVyIiwKICAgICAgICAgICAgICAgICAgICAgInR5cGUiIDogIlByb3BlcnR5IiwKICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJJbmRleGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhbmQiIDogWyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6ICJWYWxpZFR1cmFsaW9DcmVkZW50aWFscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJFeHByZXNzaW9uUmVmIgogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZVR5cGUiIDogInt1cm46aGw3LW9yZzplbG0tdHlwZXM6cjF9SW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJMaXRlcmFsIgogICAgICAgICAgICAgICAgICAgICAgICB9IF0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9IF0KICAgICAgfQogICB9Cn0=" } ] } From 6ffc3c0dcb947b4aacdcde9e5fe9f54f81096edb Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Tue, 14 Feb 2023 14:31:07 -0500 Subject: [PATCH 79/83] docker / workspace configs + comments --- DeveloperSetupGuide.md | 33 ++- Dockerfile.tmpl | 33 +-- REMS.code-workspace | 20 +- SimpleSetupGuide.md | 34 +-- docker-compose-dev.yml | 71 +------ docker-compose-porter.yml | 49 ++--- docker-compose.yml | 53 ++--- docker-sync.yml | 8 - env.json | 4 +- src/fhir/utilities.ts | 131 ++++++------ src/server.ts | 431 ++++++++++++++++++-------------------- 11 files changed, 350 insertions(+), 517 deletions(-) diff --git a/DeveloperSetupGuide.md b/DeveloperSetupGuide.md index b49bfc4b..ed124317 100644 --- a/DeveloperSetupGuide.md +++ b/DeveloperSetupGuide.md @@ -169,15 +169,12 @@ Reference: https://github.com/rbenv/rbenv 2. Now clone the DRLS component repositories from Github: ```bash cd - git clone https://github.com/mcode/CRD.git CRD git clone https://github.com/mcode/test-ehr.git test-ehr git clone https://github.com/mcode/crd-request-generator.git crd-request-generator git clone https://github.com/mcode/dtr.git dtr git clone https://github.com/mcode/REMS.git REMS - git clone https://github.com/mcode/pharmacy-information-system.git pharmacy-information-system + git clone https://github.com/mcode/pims.git pims - cd CRD/server - git clone https://github.com/mcode/CDS-Library.git CDS-Library ``` # Open DRLS REMS as VsCode workspace @@ -299,21 +296,23 @@ Reference: https://docker-sync.readthedocs.io/en/latest/getting-started/commands 3. Find **Jon Snow** in the list of patients and click the dropdown menu next to his name. 4. Select **2183126 - Turalio 200 MG Oral Capsule** in the dropdown menu. 5. Click anywhere in the row to select Jon Snow. -6. Click **Submit to CRD** at the bottom of the page. -7. After several seconds you should receive a response in the form of two **CDS cards**: +6. Click **Send Rx to PIMS** at the bottom of the page to send a prescription to the Pharmacist. +7. Click **Submit to REMS-Admin** at the bottom of the page. +8. After several seconds you should receive a response in the form of two **CDS cards**: - **Drug Has REMS: Documentation Required.** -8. Select **Patient Enrollment Form** on the returned CDS card with summary **Drug Has REMS: Documentation Required**. -9. If you are asked for login credentials, use **alice** for username and **alice** for password. -10. A webpage should open in a new tab, and after a few seconds, a questionnaire should appear. -11. Fill out questionnaire and hit **Submit REMS Bundle**. -12. A new UI will appear with REMS Admin Status and Pharmacy Status. -13. Go to http://localhost:4200 and play the role of a pharmacist. -14. Click on **Log in as Admin** in the top right of the page -15. Sign in with the pre-configured user Suzy: +9. Select **Patient Enrollment Form** on the returned CDS card with summary **Drug Has REMS: Documentation Required**. +10. If you are asked for login credentials, use **alice** for username and **alice** for password. +11. A webpage should open in a new tab, and after a few seconds, a questionnaire should appear. +12. Fill out questionnaire and hit **Submit REMS Bundle**. +13. A new UI will appear with REMS Admin Status and Pharmacy Status. +14. Go to http://localhost:5050 and play the role of a pharmacist. + + +15. Click **Doctor Orders** in the top hand navigation menu on the screen +16. See the Doctor Order that was sent to the pharmacist from the prescriber. +17. Repeat steps 9-12 for submitting the Prescriber Enrollment and Prescriber Knowledge Assessment Forms and check how ETASU statuses change in both the PIMS prescription UI and the Prescriber status page. Congratulations! DRLS is fully installed and ready for you to use! diff --git a/Dockerfile.tmpl b/Dockerfile.tmpl index 404ca1e6..e0ba4b9e 100644 --- a/Dockerfile.tmpl +++ b/Dockerfile.tmpl @@ -5,38 +5,7 @@ ARG BUNDLE_DIR ARG DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive -# RUN apt-get update && apt-get install -y ca-certificates && apt-get install -y curl - -# RUN curl http://pki.mitre.org/MITRE%20BA%20ROOT.crt >> /etc/ssl/certs/ca-certificates.crt && \ -# curl http://pki.mitre.org/MITRE%20BA%20NPE%20CA-3.crt >> /etc/ssl/certs/ca-certificates.crt && \ -# curl http://pki.mitre.org/MITRE%20BA%20NPE%20CA-4.crt >> /etc/ssl/certs/ca-certificates.crt && \ -# update-ca-certificates - -# WORKDIR /pki -# COPY Zscaler_Root_CA.pem . -# RUN cat Zscaler_Root_CA.pem >> /etc/ssl/certs/ca-certificates.crt - - - -# # Install Git from Source to get around TLS errors with Zscaler, -# # explicitly using openssl instead of gnutls -# # RUN cp /etc/apt/sources.list /etc/apt/sources.list~ -# RUN sed -i -- 's/# deb-src/deb-src/' /etc/apt/sources.list -# RUN apt-get update && \ -# apt-get install build-essential fakeroot dpkg-dev -y && \ -# apt-get install git-man -y && \ -# apt-get -f build-dep git -y && \ -# apt-get install libcurl4-openssl-dev -y - -# WORKDIR /sourcegit - -# RUN apt-get source git && \ -# cd git-2.*.*/ && \ -# sed -i -- 's/libcurl4-gnutls-dev/libcurl4-openssl-dev/' ./debian/control && \ -# sed -i -- '/TEST\s*=\s*test/d' ./debian/rules && \ -# dpkg-buildpackage -rfakeroot -b -uc -us && \ -# dpkg -i ../git_*ubuntu*.deb - +COPY ./mongo-init.js ${BUNDLE_DIR}/mongo-init.js COPY ./.cnab/app/porter.yaml ${BUNDLE_DIR}/porter.yaml COPY ./docker-compose-porter.yml ${BUNDLE_DIR}/docker-compose-porter.yml COPY ./.env ${BUNDLE_DIR}/.env diff --git a/REMS.code-workspace b/REMS.code-workspace index 6bee4879..7659d66d 100644 --- a/REMS.code-workspace +++ b/REMS.code-workspace @@ -3,13 +3,6 @@ { "path": "../test-ehr" }, - { - "name": "CRD-CDS-Library", - "path": "../CRD/server/CDS-Library" - }, - { - "path": "../CRD" - }, { "path": "../crd-request-generator" }, @@ -19,9 +12,6 @@ { "path": "." }, - { - "path": "../pharmacy-information-system" - }, { "path": "../pims" } @@ -42,13 +32,11 @@ "stopAll": true, "preLaunchTask": "Launch Chrome in Debug Mode", "configurations": [ - "Debug CRD (Local + Docker)", "Debug DTR Backend (Docker)", "Debug Test-EHR (Local + Docker)", "Debug DTR Frontend (Attach Local + Docker)", "Debug CRD-Request-Generator (Attach Docker)", - "Debug Pharmacy-Information-System Backend (Docker)", - "Debug Pharmacy-Information-System Frontend (Attach Local + Docker)", + // ToDO: Add in PIMS Debugging and REMS debugging in docker "Post Debug Task - Terminate Chrome (This is not a Debugger)" ], } @@ -61,13 +49,13 @@ "type": "shell", "label": "Launch Chrome in Debug Mode", "linux": { - "command": "google-chrome http://localhost:3000 http://localhost:4200 http://localhost:3005/register --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug" + "command": "google-chrome http://localhost:3000 http://localhost:5050 http://localhost:3005/register --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug" }, "osx": { - "command": "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome http://localhost:3000 http://localhost:4200 http://localhost:3005/register --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug" + "command": "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome http://localhost:3000 http://localhost:5050 http://localhost:3005/register --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug" }, "windows": { - "command": "for /f \"usebackq tokens=1,2,3,4,5\" %a in (`reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ /s /f \\chrome.exe ^| findstr Application`) do set CHROMEPATH=%c%d%e & set CHROMEPATH=%CHROMEPATH:ProgramFiles=Program Files% & \"%CHROMEPATH%\" http://localhost:3000 http://localhost:4200 http://localhost:3005/register --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug" + "command": "for /f \"usebackq tokens=1,2,3,4,5\" %a in (`reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ /s /f \\chrome.exe ^| findstr Application`) do set CHROMEPATH=%c%d%e & set CHROMEPATH=%CHROMEPATH:ProgramFiles=Program Files% & \"%CHROMEPATH%\" http://localhost:3000 http://localhost:5050 http://localhost:3005/register --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug" }, "presentation": { "close": true, diff --git a/SimpleSetupGuide.md b/SimpleSetupGuide.md index 490485c1..b977ac98 100644 --- a/SimpleSetupGuide.md +++ b/SimpleSetupGuide.md @@ -73,7 +73,9 @@ Your computer must have these minimum requirements: ``` #### Windows -> Note: The install on Windows requires additional steps in order to expose the WSL Docker Daemon to Porter. The way to do this is to run the porter commands inside an additional windows specific container running in interactive mode, which exposes that container's terminal instance. +> Note: The Porter Installation on Windows is currently broken, to run the REMS prototype on Windows please refer to the [Running Docker Compose without Porter](#docker-compose-without-porter) section of this guide. + + ### 4. Verify everything is working @@ -110,21 +112,23 @@ Your computer must have these minimum requirements: 3. Find **Jon Snow** in the list of patients and click the dropdown menu next to his name. 4. Select **2183126 - Turalio 200 MG Oral Capsule** in the dropdown menu. 5. Click anywhere in the row to select Jon Snow. -6. Click **Submit to CRD** at the bottom of the page. -7. After several seconds you should receive a response in the form of two **CDS cards**: +6. Click **Send Rx to PIMS** at the bottom of the page to send a prescription to the Pharmacist. +7. Click **Submit to REMS-Admin** at the bottom of the page. +8. After several seconds you should receive a response in the form of two **CDS cards**: - **Drug Has REMS: Documentation Required.** -8. Select **Patient Enrollment Form** on the returned CDS card with summary **Drug Has REMS: Documentation Required**. -9. If you are asked for login credentials, use **alice** for username and **alice** for password. -10. A webpage should open in a new tab, and after a few seconds, a questionnaire should appear. -11. Fill out questionnaire and hit **Submit REMS Bundle**. -12. A new UI will appear with REMS Admin Status and Pharmacy Status. -13. Go to http://localhost:4200 and play the role of a pharmacist. -14. Click on **Log in as Admin** in the top right of the page -15. Sign in with the pre-configured user Suzy: +9. Select **Patient Enrollment Form** on the returned CDS card with summary **Drug Has REMS: Documentation Required**. +10. If you are asked for login credentials, use **alice** for username and **alice** for password. +11. A webpage should open in a new tab, and after a few seconds, a questionnaire should appear. +12. Fill out questionnaire and hit **Submit REMS Bundle**. +13. A new UI will appear with REMS Admin Status and Pharmacy Status. +14. Go to http://localhost:5050 and play the role of a pharmacist. + + +15. Click **Doctor Orders** in the top hand navigation menu on the screen +16. See the Doctor Order that was sent to the pharmacist from the prescriber. +17. Repeat steps 9-12 for submitting the Prescriber Enrollment and Prescriber Knowledge Assessment Forms and check how ETASU statuses change in both the PIMS prescription UI and the Prescriber status page. Congratulations! DRLS is fully installed and ready for you to use! diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 53f5f9ef..6808865c 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -48,31 +48,6 @@ services: - pims_remsadmin_mongo:/data/db - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js - - # Create crd container - # crd: - # # Name of our service - # build: - # context: ../CRD - # dockerfile: Dockerfile.dev - # container_name: rems_dev_crd - # ports: - # # Port binding to host from docker container - # - "8090:8090" # Bind port 3000 of host to 3000 of container - # - "8091:8091" - # environment: - # VSAC_API_KEY: ${VSAC_API_KEY} - # volumes: - # - rems_dev_crd-sync:/CRD:nocopy # nocopy is important - # - rems_dev_crd-logs:/CRD/logs - # - rems_dev_crd-gradle:/CRD/.gradle - # - rems_dev_crd-server-gradle:/CRD/server/.gradle - # - rems_dev_crd-server-build:/CRD/server/build - # - rems_dev_crd-server-bin:/CRD/server/bin - # - rems_dev_crd-server-ValueSetCache:/CRD/server/ValueSetCache - # - rems_dev_crd-operations-build:/CRD/operations/build - # - rems_dev_crd-resources-build:/CRD/resources/build - crd-request-generator: build: context: ../crd-request-generator @@ -112,30 +87,13 @@ services: ports: - "8090:8090" - "8091:8091" + environment: + VSAC_API_KEY: ${VSAC_API_KEY} volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important - rems_dev_rems-nodeModules:/REMS/node_modules - rems_dev_rems-logs:/REMS/logs - # pharmacy-information-system: # Name of our service - # build: - # context: ../pharmacy-information-system - # dockerfile: Dockerfile.dev - # container_name: rems_dev_pharmacy-information-system - # environment: - # - PORT=3010 - # - MONGODB_CONNSTRING=mongodb://pharmacy-information-root:pharmacy-information-password@pharmacy-information-system-database:27017?retryWrites=true&w=majority - # - CRD_BASE_URL=http://crd:8090/ - # ports: # Port binding to host from docker container - # - "4200:4200" - # - "3010:3010" - # - "3011:3011" - # volumes: - # - rems_dev_pharmacy-information-system-sync:/home/node/app/pharmacy-information-system:nocopy # nocopy is important - # - rems_dev_pharmacy-information-system-nodeModules:/home/node/app/pharmacy-information-system/node_modules - # - rems_dev_pharmacy-information-system-backend-nodeModules:/home/node/app/pharmacy-information-system/backend/node_modules - # - rems_dev_pharmacy-information-system-logs:/home/node/app/pharmacy-information-system/logs - pims: build: context: ../pims @@ -149,24 +107,10 @@ services: - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules - rems_dev_pims-logs:/home/node/app/pims/logs - # pharmacy-information-system-database: # Name of our service - # image: mongo - # container_name: rems_dev_pharmacy-information-system-database - # environment: - # MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - # MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password - # expose: - # - "27017" - # ports: # Port binding to host from docker container - # - "27017:27017" - # volumes: - # - rems_dev_pharmacy-infomation-system-database:/data/db volumes: rems_dev_test-ehr-sync: external: true - # rems_dev_crd-sync: - # external: true rems_dev_crd-request-generator-sync: external: true rems_dev_dtr-sync: @@ -183,13 +127,6 @@ volumes: rems_dev_test-ehr-build: rems_dev_test-ehr-target: rems_dev_test-ehr-logs: - # rems_dev_crd-logs: - # rems_dev_crd-gradle: - # rems_dev_crd-server-gradle: - # rems_dev_crd-server-build: - # rems_dev_crd-server-bin: - # rems_dev_crd-server-ValueSetCache: - # rems_dev_crd-operations-build: rems_dev_crd-resources-build: rems_dev_crd-request-generator-nodeModules: rems_dev_crd-request-generator-databaseData: @@ -198,8 +135,8 @@ volumes: rems_dev_dtr-nodeModules: rems_dev_dtr-databaseData: rems_dev_dtr-logs: - rems_dev_pims-logs: # rems_dev_pims-database: - rems_dev_pims-nodeModules: # rems_dev_pims-backend-nodeModules: + rems_dev_pims-logs: + rems_dev_pims-nodeModules: rems_dev_rems-nodeModules: rems_dev_rems-logs: diff --git a/docker-compose-porter.yml b/docker-compose-porter.yml index a44ccd4d..66300301 100644 --- a/docker-compose-porter.yml +++ b/docker-compose-porter.yml @@ -24,18 +24,6 @@ services: extra_hosts: - "host.docker.internal:host-gateway" - - # Create crd container - crd: # Name of our service - image: codexrems/crd:REMSvCurrent - container_name: rems_porter_crd - ports: # Port binding to host from docker container - - "8090:8090" # Bind port 3000 of host to 3000 of container - environment: - VSAC_API_KEY: ${VSAC_API_KEY} - volumes: - - rems_porter_crd-server-ValueSetCache:/CRD/server/ValueSetCache - # Create crd request generator container crd-request-generator: # Name of our service image: codexrems/crd-request-generator:REMSvCurrent @@ -61,31 +49,24 @@ services: ports: # Port binding to host from docker container - "9015:9015" # Bind port 3000 of host to 3000 of container - pharmacy-information-system: # Name of our service - image: codexrems/pharmacy-information-system:REMSvCurrent - container_name: rems_porter_pharmacy-information-system - environment: - - PORT=3010 - - MONGODB_CONNSTRING=mongodb://pharmacy-information-root:pharmacy-information-password@pharmacy-information-system-database:27017?retryWrites=true&w=majority - - CRD_BASE_URL=http://crd:8090/ - ports: # Port binding to host from docker container - - "4200:4200" - - "3010:3010" - - pharmacy-information-system-database: # Name of our service + pims_remsadmin_mongo: image: mongo - container_name: rems_porter_pharmacy-information-system-database + container_name: rems_dev_pims-remsadmin-mongo + ports: + - '27017:27017' environment: - MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password - expose: - - "27017" - ports: # Port binding to host from docker container - - "27017:27017" + MONGO_INITDB_ROOT_USERNAME: rems-admin-pims-root + MONGO_INITDB_ROOT_PASSWORD: rems-admin-pims-password volumes: - - rems_porter_pharmacy-infomation-system-database:/data/db + - pims_remsadmin_mongo:/data/db + - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js + + pims: + image: codexrems/pims:REMSvCurrent + container_name: rems_dev_pims + ports: + - "5050:5050" + - "5051:5051" volumes: rems_porter_keycloak-data: - rems_porter_pharmacy-infomation-system-database: - rems_porter_crd-server-ValueSetCache: diff --git a/docker-compose.yml b/docker-compose.yml index 4ed19355..9e735f2b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,18 +25,6 @@ services: - "host.docker.internal:host-gateway" - # Create crd container - crd: # Name of our service - image: codexrems/crd:REMSvCurrent - container_name: rems_prod_crd - ports: # Port binding to host from docker container - - "8090:8090" # Bind port 3000 of host to 3000 of container - environment: - VSAC_API_KEY: ${VSAC_API_KEY} - volumes: - - rems_prod_crd-server-ValueSetCache:/CRD/server/ValueSetCache - - # Create crd request generator container crd-request-generator: # Name of our service image: codexrems/crd-request-generator:REMSvCurrent @@ -47,7 +35,6 @@ services: - "3000:3000" # Bind port 3000 of host to 3000 of container - "3001:3001" - # Create dtr container dtr: # Name of our service image: codexrems/dtr:REMSvCurrent @@ -62,32 +49,28 @@ services: ports: # Port binding to host from docker container - "9015:9015" # Bind port 3000 of host to 3000 of container - pharmacy-information-system: # Name of our service - image: codexrems/pharmacy-information-system:REMSvCurrent - container_name: rems_prod_pharmacy-information-system - environment: - - PORT=3010 - - MONGODB_CONNSTRING=mongodb://pharmacy-information-root:pharmacy-information-password@pharmacy-information-system-database:27017?retryWrites=true&w=majority - - CRD_BASE_URL=http://crd:8090/ - ports: # Port binding to host from docker container - - "4200:4200" - - "3010:3010" - - pharmacy-information-system-database: # Name of our service + pims_remsadmin_mongo: image: mongo - container_name: rems_dev_pharmacy-information-system-database + container_name: rems_dev_pims-remsadmin-mongo + ports: + - '27017:27017' environment: - MONGO_INITDB_ROOT_USERNAME: pharmacy-information-root - MONGO_INITDB_ROOT_PASSWORD: pharmacy-information-password - expose: - - "27017" - ports: # Port binding to host from docker container - - "27017:27017" + MONGO_INITDB_ROOT_USERNAME: rems-admin-pims-root + MONGO_INITDB_ROOT_PASSWORD: rems-admin-pims-password volumes: - - rems_porter_pharmacy-infomation-system-database:/data/db + - pims_remsadmin_mongo:/data/db + - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js + + pims: + image: codexrems/pims:REMSvCurrent + container_name: rems_dev_pims + ports: + - "5050:5050" + - "5051:5051" + + volumes: rems_prod_keycloak-data: - rems_porter_pharmacy-infomation-system-database: - rems_prod_crd-server-ValueSetCache: + diff --git a/docker-sync.yml b/docker-sync.yml index c6120d9c..26f8d4d9 100644 --- a/docker-sync.yml +++ b/docker-sync.yml @@ -6,10 +6,6 @@ syncs: src: ../test-ehr sync_excludes: ['.gradle', 'bin', 'build', 'target', 'logs'] - # rems_dev_crd-sync: - # src: '../CRD' - # sync_excludes: ['logs', '.gradle', 'server/.gradle', 'server/bin', 'server/build', 'server/ValueSetCache', 'operations/build', 'resources/build'] - rems_dev_crd-request-generator-sync: src: '../crd-request-generator' sync_excludes: ['node_modules', 'build', 'databaseData', 'logs'] @@ -21,10 +17,6 @@ syncs: rems_dev_rems-sync: src: '.' sync_excludes: ['node_modules', 'logs'] - - # rems_dev_pharmacy-information-system-sync: - # src: '../pharmacy-information-system' - # sync_excludes: ['node_modules', 'backend/node_modules', 'logs'] rems_dev_pims-sync: src: '../pims' diff --git a/env.json b/env.json index c6c4f58b..6846e7cb 100644 --- a/env.json +++ b/env.json @@ -1,7 +1,7 @@ { "MONGO_HOSTNAME": { "type": "string", - "default": "localhost", + "default": "rems-admin-pims-root:rems-admin-pims-password@pims_remsadmin_mongo:27017", "required": true }, "MONGO_DB_NAME": { @@ -33,6 +33,6 @@ }, "VSAC_KEY": { "type": "string", - "default": "changeMe" + "default": "f6486e93-5f75-481c-a5c1-b6395d7a217d" } } diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 82975636..158447aa 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -290,73 +290,70 @@ export class FhirUtilities { // define schemas + + // leave comments in of structure in for now as they will be useful to reference during the mongoose transition const medicationCollection = await db.collection('medication-requirements' - // , { - // 'name': { 'type': 'string' }, - // 'codeSystem': { 'type': 'string' }, - // 'code': { 'type': 'string' }, - // 'requirements': { - // 'type': 'array', - // 'items': { - // 'type': 'object', - // 'properties': { - // 'name': { 'type': 'string' }, - // 'description': { 'type': 'string' }, - // 'questionnaire': { 'type': 'object' }, - // 'stakeholderType': { 'type': 'string' }, - // 'createNewCase': { 'type': 'boolean' }, - // 'resourceId': { 'type': 'string' } - // } - // } - // } - // }, (err: any, collection: any) => { - // if (err) console.log(err); - // } + // , { + // 'name': { 'type': 'string' }, + // 'codeSystem': { 'type': 'string' }, + // 'code': { 'type': 'string' }, + // 'requirements': { + // 'type': 'array', + // 'items': { + // 'type': 'object', + // 'properties': { + // 'name': { 'type': 'string' }, + // 'description': { 'type': 'string' }, + // 'questionnaire': { 'type': 'object' }, + // 'stakeholderType': { 'type': 'string' }, + // 'createNewCase': { 'type': 'boolean' }, + // 'resourceId': { 'type': 'string' } + // } + // } + // } + // } ); await medicationCollection.createIndex({ name: 1 }, { unique: true }); + // leave comments of structure in for now as they will be useful to reference during the mongoose transition const metRequirementsCollection = await db.collection('met-requirements' - // , { - // 'completed': { 'type': 'boolean' }, - // 'completedQuestionnaire': { 'type': 'object' }, - // 'requirementName': { 'type': 'string' }, - // 'requirementDescription': {'type': 'string'} - // 'drugName': { 'type': 'string' }, - // 'stakeholderId': { 'type': 'string' }, - // 'case_numbers': { 'type': 'array', 'items': { 'type': 'string' } } - // }, (err: any, collection: any) => { - // if (err) console.log(err); - // } + // , { + // 'completed': { 'type': 'boolean' }, + // 'completedQuestionnaire': { 'type': 'object' }, + // 'requirementName': { 'type': 'string' }, + // 'requirementDescription': {'type': 'string'} + // 'drugName': { 'type': 'string' }, + // 'stakeholderId': { 'type': 'string' }, + // 'case_numbers': { 'type': 'array', 'items': { 'type': 'string' } } + // } ); metRequirementsCollection.createIndex({ drugName: 1, requirementName: 1, stakeholderId: 1 }, { unique: true }); - + // leave comments of structure in for now as they will be useful to reference during the mongoose transition const remsCaseCollection = await db.collection('rems-case' - // , { - // 'case_number': { 'type': 'string' }, - // 'status': { 'type': 'string' }, - // 'drugName': { 'type': 'string' }, - // 'patientName': { 'type': 'string' }, - // 'metRequirements': { - // 'type': 'array', - // 'items': { - // 'type': 'object', - // 'properties': { - // 'metRequirementId': { 'type': 'number' }, - // 'completed': { 'type': 'boolean' }, - // 'stakeholderId': { 'type': 'string' }, - // 'requirementName': { 'type': 'string' }, - // 'requirementDescription': {'type': 'string'}, - // } - // } - // } - // }, (err: any, collection: any) => { - // if (err) throw err; - // } + // , { + // 'case_number': { 'type': 'string' }, + // 'status': { 'type': 'string' }, + // 'drugName': { 'type': 'string' }, + // 'patientName': { 'type': 'string' }, + // 'metRequirements': { + // 'type': 'array', + // 'items': { + // 'type': 'object', + // 'properties': { + // 'metRequirementId': { 'type': 'number' }, + // 'completed': { 'type': 'boolean' }, + // 'stakeholderId': { 'type': 'string' }, + // 'requirementName': { 'type': 'string' }, + // 'requirementDescription': {'type': 'string'}, + // } + // } + // } + // } ); @@ -437,9 +434,9 @@ export class FhirUtilities { ] }, { - name: "Isotretinoin", - codeSystem: "http://www.nlm.nih.gov/research/umls/rxnorm", - code: "6064", + name: 'Isotretinoin', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '6064', requirements: [{ name: 'Patient Enrollment', description: 'Submit Patient Enrollment form to the REMS Administrator', @@ -473,32 +470,32 @@ export class FhirUtilities { completed: true, requirementName: 'Pharmacist Enrollment', drugName: 'Turalio', - completedQuestionnaire: null, - case_numbers: [], + completedQuestionnaire: null, + case_numbers: [], }, { stakeholderId: 'Organization/pharm0111', completed: true, requirementName: 'Pharmacist Enrollment', drugName: 'TIRF', - completedQuestionnaire: null, - case_numbers: [], + completedQuestionnaire: null, + case_numbers: [], }, { stakeholderId: 'Organization/pharm0111', completed: true, requirementName: 'Pharmacist Knowledge Assessment', drugName: 'TIRF', - completedQuestionnaire: null, - case_numbers: [], + completedQuestionnaire: null, + case_numbers: [], }, { stakeholderId: 'Organization/pharm0111', completed: true, - requirementName: "Pharmacist Enrollment", - drugName: "Isotretinoin", - completedQuestionnaire: null, - case_numbers: [], + requirementName: 'Pharmacist Enrollment', + drugName: 'Isotretinoin', + completedQuestionnaire: null, + case_numbers: [], }], (err: any, result: any) => { if (err) console.log(err); console.log('Inserted Pharmacist Met Requirements'); diff --git a/src/server.ts b/src/server.ts index 677d0b43..7046f7dd 100644 --- a/src/server.ts +++ b/src/server.ts @@ -131,267 +131,250 @@ class REMSServer extends Server { ); this.app.get('/etasu/met/patient/:patientName/drug/:drugName', (req: any, res: { send: (arg0: string) => any }) => { - remsCaseCollection.findOne({ patientName : req.params.patientName, drugName: req.params.drugName}, (err: any, remsCase: any) => { + remsCaseCollection.findOne({ patientName: req.params.patientName, drugName: req.params.drugName }, (err: any, remsCase: any) => { if (err) throw err; res.send(remsCase); }); } ); - this.app.post('/etasu/reset', (req: any, res: { send: (arg0: string) => any }) => { + this.app.post('/etasu/reset', async (req: any, res: { send: (arg0: string) => any }) => { console.log('Dropping collections'); - medicationCollection.drop(); - remsCaseCollection.drop(); - metRequirementsCollection.drop(); + await medicationCollection.deleteMany({}); + await remsCaseCollection.deleteMany({}); + await metRequirementsCollection.deleteMany({}); console.log('Resetting the database'); - FhirUtilities.populateDB(); + await FhirUtilities.populateDB(); res.send('reset etasu database collections'); } ); this.app.post('/etasu/met', async (req: any, res: { send: (arg0: string) => any }) => { - let returnedRemsRequestDoc: any; - let returnedMetReqDoc: any; - let returnRemsRequest = false; - const requestBody = req.body; - - // extract params and questionnaire response identifier - const params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); - const questionnaireResponse = this.getQuestionnaireResponse(requestBody); - const questionnaireStringArray = questionnaireResponse.questionnaire.split('/'); - const requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; - - // stakeholder and medication references - let prescriptionReference = ''; - let practitionerReference = ''; - let pharmacistReference = ''; - let patientReference = ''; - for (const param of params.parameter) { - if (param.name === 'prescription') { - prescriptionReference = param.reference; - } - else if (param.name === 'prescriber') { - practitionerReference = param.reference; - } - else if (param.name === 'pharmacy') { - pharmacistReference = param.reference; - } else if (param.name === 'source-patient') { - patientReference = param.reference; + try { + let returnedRemsRequestDoc: any; + let returnedMetReqDoc: any; + let returnRemsRequest = false; + const requestBody = req.body; + + // extract params and questionnaire response identifier + const params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); + const questionnaireResponse = this.getQuestionnaireResponse(requestBody); + const questionnaireStringArray = questionnaireResponse.questionnaire.split('/'); + const requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; + + // stakeholder and medication references + let prescriptionReference = ''; + let practitionerReference = ''; + let pharmacistReference = ''; + let patientReference = ''; + for (const param of params.parameter) { + if (param.name === 'prescription') { + prescriptionReference = param.reference; + } + else if (param.name === 'prescriber') { + practitionerReference = param.reference; + } + else if (param.name === 'pharmacy') { + pharmacistReference = param.reference; + } else if (param.name === 'source-patient') { + patientReference = param.reference; + } } - } - // obtain drug information from database - const presciption = this.getResource(requestBody, prescriptionReference); - const prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; - const prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; - const patient = this.getResource(requestBody, patientReference); - const patientName = patient.name[0].given[0] + ' ' + patient.name[0].family; - - const drug = await medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem } - // , (err: any, result: any) => { - // if (err) console.log(err); - // console.log('Found Drug Info: '); - // console.log(result) - // return result; - // } - ); - // iterate through each requirement of the drug - for (const requirement of drug.requirements) { - // figure out which stakeholder the req corresponds to - const reqStakeholder = requirement.stakeholderType; - const reqStakeholderReference = reqStakeholder === 'prescriber' ? practitionerReference : (reqStakeholder === 'pharmacist' ? pharmacistReference : patientReference); - - // if the requirement is the one submitted continue - if (requirement.resourceId === requirementId) { - - // if the req submitted is a patient enrollment form and requires creating a new case - if (requirement.createNewCase) { - returnRemsRequest = true; - const case_number = uid(); - - // create new rems request and add the created metReq to it - let remsRequestCompletedStatus = 'Approved'; - const remsRequest: any = { - case_number: case_number, - status : remsRequestCompletedStatus, - drugName: drug.name, - patientName: patientName, - metRequirements : [], - }; - returnRemsRequest = true; - - // create the metReq that was submitted - const metReq = { - completed: true, - completedQuestionnaire: questionnaireResponse, - requirementName: requirement.name, - requirementDescription: requirement.description, - drugName: drug.name, - stakeholderId: reqStakeholderReference, - case_numbers: [case_number], - }; - - await metRequirementsCollection.insertOne(metReq - // , (err: any, result: any) => { - // if (err) console.log(err); - // console.log('Inserted Matched Met Requirement'); - // } - ); - - const matchedMetReq = await metRequirementsCollection.findOne(metReq); - - - remsRequest.metRequirements.push( - { - stakeholderId : matchedMetReq.stakeholderId, - completed : matchedMetReq.completed, - metRequirementId: matchedMetReq._id, - requirementName: matchedMetReq.requirementName, - requirementDescription: matchedMetReq.requirementDescription, - } - ); - - // iterate through all other reqs again to create corresponding false metReqs / assign to existing - for (const requirement2 of drug.requirements) { - // skip if the req found is the same as in the outer loop and has already been processed - if (!(requirement2.resourceId === requirementId)) { - // figure out which stakeholder the req corresponds to - const reqStakeholder2 = requirement2.stakeholderType; - const reqStakeholder2Reference = reqStakeholder2 === 'prescriber' ? practitionerReference : (reqStakeholder2 === 'pharmacist' ? pharmacistReference : patientReference); - - const matchedMetReq2 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name}); - if (matchedMetReq2) { - remsRequest.metRequirements.push( - { - stakeholderId : matchedMetReq2.stakeholderId, - completed : matchedMetReq2.completed, - metRequirementId: matchedMetReq2._id, - requirementName: matchedMetReq2.requirementName, - requirementDescription: matchedMetReq2.requirementDescription, + // obtain drug information from database + const presciption = this.getResource(requestBody, prescriptionReference); + const prescriptionSystem = presciption.medicationCodeableConcept.coding[0].system; + const prescriptionCode = presciption.medicationCodeableConcept.coding[0].code; + const patient = this.getResource(requestBody, patientReference); + const patientName = patient.name[0].given[0] + ' ' + patient.name[0].family; + + const drug = await medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem }); + // iterate through each requirement of the drug + for (const requirement of drug.requirements) { + // figure out which stakeholder the req corresponds to + const reqStakeholder = requirement.stakeholderType; + const reqStakeholderReference = reqStakeholder === 'prescriber' ? practitionerReference : (reqStakeholder === 'pharmacist' ? pharmacistReference : patientReference); + + // if the requirement is the one submitted continue + if (requirement.resourceId === requirementId) { + + // if the req submitted is a patient enrollment form and requires creating a new case + if (requirement.createNewCase) { + returnRemsRequest = true; + const case_number = uid(); + + // create new rems request and add the created metReq to it + let remsRequestCompletedStatus = 'Approved'; + const remsRequest: any = { + case_number: case_number, + status: remsRequestCompletedStatus, + drugName: drug.name, + patientName: patientName, + metRequirements: [], + }; + returnRemsRequest = true; + + // create the metReq that was submitted + const metReq = { + completed: true, + completedQuestionnaire: questionnaireResponse, + requirementName: requirement.name, + requirementDescription: requirement.description, + drugName: drug.name, + stakeholderId: reqStakeholderReference, + case_numbers: [case_number], + }; + + await metRequirementsCollection.insertOne(metReq); + + const matchedMetReq = await metRequirementsCollection.findOne(metReq); + + + remsRequest.metRequirements.push( + { + stakeholderId: matchedMetReq.stakeholderId, + completed: matchedMetReq.completed, + metRequirementId: matchedMetReq._id, + requirementName: matchedMetReq.requirementName, + requirementDescription: matchedMetReq.requirementDescription, + } + ); + + // iterate through all other reqs again to create corresponding false metReqs / assign to existing + for (const requirement2 of drug.requirements) { + // skip if the req found is the same as in the outer loop and has already been processed + if (!(requirement2.resourceId === requirementId)) { + // figure out which stakeholder the req corresponds to + const reqStakeholder2 = requirement2.stakeholderType; + const reqStakeholder2Reference = reqStakeholder2 === 'prescriber' ? practitionerReference : (reqStakeholder2 === 'pharmacist' ? pharmacistReference : patientReference); + + const matchedMetReq2 = await metRequirementsCollection.findOne({ stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name }); + if (matchedMetReq2) { + remsRequest.metRequirements.push( + { + stakeholderId: matchedMetReq2.stakeholderId, + completed: matchedMetReq2.completed, + metRequirementId: matchedMetReq2._id, + requirementName: matchedMetReq2.requirementName, + requirementDescription: matchedMetReq2.requirementDescription, + } + ); + if (!matchedMetReq2.completed) { + remsRequestCompletedStatus = 'Pending'; } - ); - if(!matchedMetReq2.completed) { - remsRequestCompletedStatus = 'Pending'; - } - // matchedMetReq2.case_numbers.push(case_number); - await metRequirementsCollection.updateOne(matchedMetReq2, {$addToSet: {case_numbers: case_number}}); - } else { - // create the metReq that was submitted - const newMetReq = { - completed: false, - completedQuestionnaire: null, - requirementName: requirement2.name, - requirementDescription: requirement2.description, - drugName: drug.name, - stakeholderId: reqStakeholder2Reference, - case_numbers: [case_number], - }; + // matchedMetReq2.case_numbers.push(case_number); + await metRequirementsCollection.updateOne(matchedMetReq2, { $addToSet: { case_numbers: case_number } }); + } else { + // create the metReq that was submitted + const newMetReq = { + completed: false, + completedQuestionnaire: null, + requirementName: requirement2.name, + requirementDescription: requirement2.description, + drugName: drug.name, + stakeholderId: reqStakeholder2Reference, + case_numbers: [case_number], + }; - remsRequestCompletedStatus = 'Pending'; + remsRequestCompletedStatus = 'Pending'; - await metRequirementsCollection.insertOne(newMetReq - // , (err: any, result: any) => { - // if (err) console.log(err); - // console.log('Inserted New Met Requirement'); - // } - ); + await metRequirementsCollection.insertOne(newMetReq); - const newMetReqDoc = await metRequirementsCollection.findOne(newMetReq); + const newMetReqDoc = await metRequirementsCollection.findOne(newMetReq); - remsRequest.metRequirements.push( - { - stakeholderId : newMetReqDoc.stakeholderId, - completed : newMetReqDoc.completed, - metRequirementId: newMetReqDoc._id, - requirementName: newMetReqDoc.requirementName, - requirementDescription: newMetReqDoc.requirementDescription, + remsRequest.metRequirements.push( + { + stakeholderId: newMetReqDoc.stakeholderId, + completed: newMetReqDoc.completed, + metRequirementId: newMetReqDoc._id, + requirementName: newMetReqDoc.requirementName, + requirementDescription: newMetReqDoc.requirementDescription, + } + ); } - ); } - } - } + } + + remsRequest.status = remsRequestCompletedStatus; + await remsCaseCollection.insertOne(remsRequest); + returnedRemsRequestDoc = await remsCaseCollection.findOne(remsRequest); + } else { + const matchedMetReq3 = await metRequirementsCollection.findOne({ stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name }); + if (matchedMetReq3) { + // matchedMetReq3.completed = true; + // matchedMetReq3.completedQuestionnaire = questionnaireResponse; + if (!matchedMetReq3.completed) { + await metRequirementsCollection.updateOne(matchedMetReq3, { $set: { completed: true, completedQuestionnaire: questionnaireResponse } }); + + returnedMetReqDoc = await metRequirementsCollection.findOne({ _id: matchedMetReq3._id }); + + // this should be an array returned via .find() - tried using $in but could not get it to work - using the first element for now as a work around since we only have one patient + const remsRequestToUpdate = await remsCaseCollection.findOne({ case_number: returnedMetReqDoc.case_numbers[0] }); - remsRequest.status = remsRequestCompletedStatus; - await remsCaseCollection.insertOne(remsRequest - // , (err: any, result: any) => { - // if (err) console.log(err); - // console.log('Inserted Rems Case'); - // } - ); - returnedRemsRequestDoc = await remsCaseCollection.findOne(remsRequest); - } else { - const matchedMetReq3 = await metRequirementsCollection.findOne({stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name}); - if (matchedMetReq3) { - // matchedMetReq3.completed = true; - // matchedMetReq3.completedQuestionnaire = questionnaireResponse; - await metRequirementsCollection.updateOne(matchedMetReq3, {$set: {completed: true, completedQuestionnaire: questionnaireResponse}}); - - returnedMetReqDoc = await metRequirementsCollection.findOne({_id: matchedMetReq3._id}); - - // this should be an array returned via .find() - tried using $in but could not get it to work - using the first element for now as a work around since we only have one patient - const remsRequestToUpdate = await remsCaseCollection.findOne({ case_number: returnedMetReqDoc.case_numbers[0] }); - - // for (let remsRequestToUpdate of remsRequestsToUpdate) { - let foundUncompleted = false; - const metReqArray = remsRequestToUpdate.metRequirements; - for (let i=0; i < remsRequestToUpdate.metRequirements.length; i++) { - const req4 = remsRequestToUpdate.metRequirements[i]; - // _id comparison would not work for some reason - if(req4.requirementName === matchedMetReq3.requirementName) { - metReqArray[i].completed = true; - req4.completed = true; - const update = await remsCaseCollection.updateOne({_id: remsRequestToUpdate._id}, {$set: {metRequirements: metReqArray}}); + + + // ToDO: iterate over multiple remsRequests - right now there will only be one that matches, but with multiple patients in the system there could be more + + // for (let remsRequestToUpdate of remsRequestsToUpdate) { + let foundUncompleted = false; + const metReqArray = remsRequestToUpdate.metRequirements; + for (let i = 0; i < remsRequestToUpdate.metRequirements.length; i++) { + const req4 = remsRequestToUpdate.metRequirements[i]; + // _id comparison would not work for some reason + if (req4.requirementName === matchedMetReq3.requirementName) { + metReqArray[i].completed = true; + req4.completed = true; + const update = await remsCaseCollection.updateOne({ _id: remsRequestToUpdate._id }, { $set: { metRequirements: metReqArray } }); + } + if (!req4.completed) { + foundUncompleted = true; + } } - if(!req4.completed){ - foundUncompleted = true; + + + if (!foundUncompleted && remsRequestToUpdate.status === 'Pending') { + await remsCaseCollection.updateOne(remsRequestToUpdate, { $set: { status: 'Approved' } }); } - } - // remsRequestToUpdate.metRequirements.forEach(async (req4: any, index: number) => { - - // }); - if(!foundUncompleted && remsRequestToUpdate.status === 'Pending') { - // remsRequestToUpdate.status = 'Approved'; - await remsCaseCollection.updateOne(remsRequestToUpdate, {$set: {status: 'Approved'}}); + + // } } - - // } - } else { - // create the metReq that was submitted - const newMetReq3 = { - completed: true, - completedQuestionnaire: questionnaireResponse, - requirementName: requirement.name, - requirementDescription: requirement.requirementDescription, - drugName: drug.name, - stakeholderId: reqStakeholderReference, - case_numbers: [], - }; - - await metRequirementsCollection.insertOne(newMetReq3 - // , (err: any, result: any) => { - // if (err) console.log(err); - // console.log('Inserted New Met Requirement'); - // } - ); - returnedMetReqDoc = await metRequirementsCollection.findOne(newMetReq3); + + } else { + // create the metReq that was submitted + const newMetReq3 = { + completed: true, + completedQuestionnaire: questionnaireResponse, + requirementName: requirement.name, + requirementDescription: requirement.requirementDescription, + drugName: drug.name, + stakeholderId: reqStakeholderReference, + case_numbers: [], + }; + + await metRequirementsCollection.insertOne(newMetReq3); + returnedMetReqDoc = await metRequirementsCollection.findOne(newMetReq3); + } } + break; } - break; } - } - // return MetReq unless a new case is created in which case return the Rems request - if (returnRemsRequest) { - res.send(returnedRemsRequestDoc); - } else { - res.send(returnedMetReqDoc); + // return MetReq unless a new case is created in which case return the Rems request + if (returnRemsRequest) { + res.send(returnedRemsRequestDoc); + } else { + res.send(returnedMetReqDoc); + } + } catch (error) { + console.log(error); } }); + return this; } From 938f8370e10000f5ecafbd262a93a8e35d8056d7 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Tue, 14 Feb 2023 14:51:13 -0500 Subject: [PATCH 80/83] environment variables --- docker-compose-dev.yml | 2 ++ docker-compose-porter.yml | 3 +++ docker-compose.yml | 3 +++ env.json | 4 ++-- src/config.ts | 4 ++-- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 6808865c..5d1f80ae 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -89,6 +89,8 @@ services: - "8091:8091" environment: VSAC_API_KEY: ${VSAC_API_KEY} + MONGO_HOSTNAME: mongodb://rems-admin-pims-root:rems-admin-pims-password@pims_remsadmin_mongo:27017 + volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important - rems_dev_rems-nodeModules:/REMS/node_modules diff --git a/docker-compose-porter.yml b/docker-compose-porter.yml index 66300301..67f11560 100644 --- a/docker-compose-porter.yml +++ b/docker-compose-porter.yml @@ -48,6 +48,9 @@ services: container_name: rems_porter_rems ports: # Port binding to host from docker container - "9015:9015" # Bind port 3000 of host to 3000 of container + environment: + VSAC_API_KEY: ${VSAC_API_KEY} + MONGO_HOSTNAME: mongodb://rems-admin-pims-root:rems-admin-pims-password@pims_remsadmin_mongo:27017 pims_remsadmin_mongo: image: mongo diff --git a/docker-compose.yml b/docker-compose.yml index 9e735f2b..53be10d3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,6 +48,9 @@ services: container_name: rems_prod_rems ports: # Port binding to host from docker container - "9015:9015" # Bind port 3000 of host to 3000 of container + environment: + VSAC_API_KEY: ${VSAC_API_KEY} + MONGO_HOSTNAME: mongodb://rems-admin-pims-root:rems-admin-pims-password@pims_remsadmin_mongo:27017 pims_remsadmin_mongo: image: mongo diff --git a/env.json b/env.json index 6846e7cb..075cf5db 100644 --- a/env.json +++ b/env.json @@ -1,7 +1,7 @@ { "MONGO_HOSTNAME": { "type": "string", - "default": "rems-admin-pims-root:rems-admin-pims-password@pims_remsadmin_mongo:27017", + "default": "mongodb://rems-admin-pims-root:rems-admin-pims-password@localhost:27017", "required": true }, "MONGO_DB_NAME": { @@ -33,6 +33,6 @@ }, "VSAC_KEY": { "type": "string", - "default": "f6486e93-5f75-481c-a5c1-b6395d7a217d" + "default": "changeMe" } } diff --git a/src/config.ts b/src/config.ts index 55f1f20a..8fbdf8f0 100644 --- a/src/config.ts +++ b/src/config.ts @@ -23,7 +23,7 @@ export default { }, general: { resourcePath: 'src/cds-library/CRD-DTR', - VsacApiKey: env.VSAC_KEY + VsacApiKey: env.VSAC_API_KEY }, database: { selected: 'mongo', @@ -32,7 +32,7 @@ export default { options: '' }, mongoConfig: { - location: `mongodb://${env.MONGO_HOSTNAME}`, + location: env.MONGO_HOSTNAME, db_name: env.MONGO_DB_NAME, options: { //auto_reconnect: true, From 0f1b12280a190e5778bb18f4ee95e47bc2703922 Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Tue, 14 Feb 2023 15:13:39 -0500 Subject: [PATCH 81/83] run prettier --- src/fhir/utilities.ts | 318 ++++++++++++++++++++++-------------------- src/server.ts | 196 ++++++++++++++------------ 2 files changed, 272 insertions(+), 242 deletions(-) diff --git a/src/fhir/utilities.ts b/src/fhir/utilities.ts index 158447aa..4ff1b630 100644 --- a/src/fhir/utilities.ts +++ b/src/fhir/utilities.ts @@ -288,11 +288,11 @@ export class FhirUtilities { static async populateDB() { const db = Globals.database; - // define schemas - // leave comments in of structure in for now as they will be useful to reference during the mongoose transition - const medicationCollection = await db.collection('medication-requirements' + // leave comments in of structure in for now as they will be useful to reference during the mongoose transition + const medicationCollection = await db.collection( + 'medication-requirements' // , { // 'name': { 'type': 'string' }, // 'codeSystem': { 'type': 'string' }, @@ -314,11 +314,11 @@ export class FhirUtilities { // } ); - await medicationCollection.createIndex({ name: 1 }, { unique: true }); - // leave comments of structure in for now as they will be useful to reference during the mongoose transition - const metRequirementsCollection = await db.collection('met-requirements' + // leave comments of structure in for now as they will be useful to reference during the mongoose transition + const metRequirementsCollection = await db.collection( + 'met-requirements' // , { // 'completed': { 'type': 'boolean' }, // 'completedQuestionnaire': { 'type': 'object' }, @@ -330,11 +330,14 @@ export class FhirUtilities { // } ); + metRequirementsCollection.createIndex( + { drugName: 1, requirementName: 1, stakeholderId: 1 }, + { unique: true } + ); - metRequirementsCollection.createIndex({ drugName: 1, requirementName: 1, stakeholderId: 1 }, { unique: true }); - - // leave comments of structure in for now as they will be useful to reference during the mongoose transition - const remsCaseCollection = await db.collection('rems-case' + // leave comments of structure in for now as they will be useful to reference during the mongoose transition + const remsCaseCollection = await db.collection( + 'rems-case' // , { // 'case_number': { 'type': 'string' }, // 'status': { 'type': 'string' }, @@ -356,149 +359,160 @@ export class FhirUtilities { // } ); - // prepopulateDB - medicationCollection.insert([{ - name: 'Turalio', - codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', - code: '2183126', - requirements: [{ - name: 'Patient Enrollment', - description: 'Submit Patient Enrollment form to the REMS Administrator', - stakeholderType: 'patient', - createNewCase: true, - resourceId: 'TuralioRemsPatientEnrollment', - }, - { - name: 'Prescriber Enrollment', - description: 'Submit Prescriber Enrollment form to the REMS Administrator', - stakeholderType: 'prescriber', - createNewCase: false, - resourceId: 'TuralioPrescriberEnrollmentForm', - }, - { - name: 'Prescriber Knowledge Assessment', - description: 'Submit Prescriber Knowledge Assessment form to the REMS Administrator', - stakeholderType: 'prescriber', - createNewCase: false, - resourceId: 'TuralioPrescriberKnowledgeAssessment', - }, - { - name: 'Pharmacist Enrollment', - description: 'Submit Pharmacist Enrollment form to the REMS Administrator', - stakeholderType: 'pharmacist', - createNewCase: false, - resourceId: 'TuralioPharmacistEnrollment', - }, - ] - }, - { - name: 'TIRF', - codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', - code: '1237051', - requirements: [{ - name: 'Patient Enrollment', - description: 'Submit Patient Enrollment form to the REMS Administrator', - stakeholderType: 'patient', - createNewCase: true, - resourceId: 'TIRFRemsPatientEnrollment', - }, - { - name: 'Prescriber Enrollment', - description: 'Submit Prescriber Enrollment form to the REMS Administrator', - stakeholderType: 'prescriber', - createNewCase: false, - resourceId: 'TIRFPrescriberEnrollmentForm', - }, - { - name: 'Prescriber Knowledge Assessment', - description: 'Submit Prescriber Knowledge Assessment form to the REMS Administrator', - stakeholderType: 'prescriber', - createNewCase: false, - resourceId: 'TIRFPrescriberKnowledgeAssessment', - }, - { - name: 'Pharmacist Enrollment', - description: 'Submit Pharmacist Enrollment form to the REMS Administrator', - stakeholderType: 'pharmacist', - createNewCase: false, - resourceId: 'TIRFPharmacistEnrollmentForm', - }, - { - name: 'Pharmacist Knowledge Assessment', - description: 'Submit Pharmacist Knowledge Assessment form to the REMS Administrator', - stakeholderType: 'pharmacist', - createNewCase: false, - resourceId: 'TIRFPharmacistKnowledgeAssessment', - }, - ] - }, - { - name: 'Isotretinoin', - codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', - code: '6064', - requirements: [{ - name: 'Patient Enrollment', - description: 'Submit Patient Enrollment form to the REMS Administrator', - stakeholderType: 'patient', - createNewCase: true, - resourceId: 'IPledgeRemsPatientEnrollment', - }, - { - name: 'Prescriber Enrollment', - description: 'Submit Prescriber Enrollment form to the REMS Administrator', - stakeholderType: 'prescriber', - createNewCase: false, - resourceId: 'IPledgeRemsPrescriberEnrollmentForm' - }, - { - name: 'Pharmacist Enrollment', - description: 'Submit Pharmacist Enrollment form to the REMS Administrator', - stakeholderType: 'pharmacist', - createNewCase: false, - resourceId: 'IPledgeRemsPharmacistEnrollmentForm' - }, - ] - }, - ], (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted Drug Information'); - }); + medicationCollection.insert( + [ + { + name: 'Turalio', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '2183126', + requirements: [ + { + name: 'Patient Enrollment', + description: 'Submit Patient Enrollment form to the REMS Administrator', + stakeholderType: 'patient', + createNewCase: true, + resourceId: 'TuralioRemsPatientEnrollment' + }, + { + name: 'Prescriber Enrollment', + description: 'Submit Prescriber Enrollment form to the REMS Administrator', + stakeholderType: 'prescriber', + createNewCase: false, + resourceId: 'TuralioPrescriberEnrollmentForm' + }, + { + name: 'Prescriber Knowledge Assessment', + description: 'Submit Prescriber Knowledge Assessment form to the REMS Administrator', + stakeholderType: 'prescriber', + createNewCase: false, + resourceId: 'TuralioPrescriberKnowledgeAssessment' + }, + { + name: 'Pharmacist Enrollment', + description: 'Submit Pharmacist Enrollment form to the REMS Administrator', + stakeholderType: 'pharmacist', + createNewCase: false, + resourceId: 'TuralioPharmacistEnrollment' + } + ] + }, + { + name: 'TIRF', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '1237051', + requirements: [ + { + name: 'Patient Enrollment', + description: 'Submit Patient Enrollment form to the REMS Administrator', + stakeholderType: 'patient', + createNewCase: true, + resourceId: 'TIRFRemsPatientEnrollment' + }, + { + name: 'Prescriber Enrollment', + description: 'Submit Prescriber Enrollment form to the REMS Administrator', + stakeholderType: 'prescriber', + createNewCase: false, + resourceId: 'TIRFPrescriberEnrollmentForm' + }, + { + name: 'Prescriber Knowledge Assessment', + description: 'Submit Prescriber Knowledge Assessment form to the REMS Administrator', + stakeholderType: 'prescriber', + createNewCase: false, + resourceId: 'TIRFPrescriberKnowledgeAssessment' + }, + { + name: 'Pharmacist Enrollment', + description: 'Submit Pharmacist Enrollment form to the REMS Administrator', + stakeholderType: 'pharmacist', + createNewCase: false, + resourceId: 'TIRFPharmacistEnrollmentForm' + }, + { + name: 'Pharmacist Knowledge Assessment', + description: 'Submit Pharmacist Knowledge Assessment form to the REMS Administrator', + stakeholderType: 'pharmacist', + createNewCase: false, + resourceId: 'TIRFPharmacistKnowledgeAssessment' + } + ] + }, + { + name: 'Isotretinoin', + codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm', + code: '6064', + requirements: [ + { + name: 'Patient Enrollment', + description: 'Submit Patient Enrollment form to the REMS Administrator', + stakeholderType: 'patient', + createNewCase: true, + resourceId: 'IPledgeRemsPatientEnrollment' + }, + { + name: 'Prescriber Enrollment', + description: 'Submit Prescriber Enrollment form to the REMS Administrator', + stakeholderType: 'prescriber', + createNewCase: false, + resourceId: 'IPledgeRemsPrescriberEnrollmentForm' + }, + { + name: 'Pharmacist Enrollment', + description: 'Submit Pharmacist Enrollment form to the REMS Administrator', + stakeholderType: 'pharmacist', + createNewCase: false, + resourceId: 'IPledgeRemsPharmacistEnrollmentForm' + } + ] + } + ], + (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Drug Information'); + } + ); - metRequirementsCollection.insert([{ - stakeholderId: 'Organization/pharm0111', - completed: true, - requirementName: 'Pharmacist Enrollment', - drugName: 'Turalio', - completedQuestionnaire: null, - case_numbers: [], - }, - { - stakeholderId: 'Organization/pharm0111', - completed: true, - requirementName: 'Pharmacist Enrollment', - drugName: 'TIRF', - completedQuestionnaire: null, - case_numbers: [], - }, - { - stakeholderId: 'Organization/pharm0111', - completed: true, - requirementName: 'Pharmacist Knowledge Assessment', - drugName: 'TIRF', - completedQuestionnaire: null, - case_numbers: [], - }, - { - stakeholderId: 'Organization/pharm0111', - completed: true, - requirementName: 'Pharmacist Enrollment', - drugName: 'Isotretinoin', - completedQuestionnaire: null, - case_numbers: [], - }], (err: any, result: any) => { - if (err) console.log(err); - console.log('Inserted Pharmacist Met Requirements'); - }); + metRequirementsCollection.insert( + [ + { + stakeholderId: 'Organization/pharm0111', + completed: true, + requirementName: 'Pharmacist Enrollment', + drugName: 'Turalio', + completedQuestionnaire: null, + case_numbers: [] + }, + { + stakeholderId: 'Organization/pharm0111', + completed: true, + requirementName: 'Pharmacist Enrollment', + drugName: 'TIRF', + completedQuestionnaire: null, + case_numbers: [] + }, + { + stakeholderId: 'Organization/pharm0111', + completed: true, + requirementName: 'Pharmacist Knowledge Assessment', + drugName: 'TIRF', + completedQuestionnaire: null, + case_numbers: [] + }, + { + stakeholderId: 'Organization/pharm0111', + completed: true, + requirementName: 'Pharmacist Enrollment', + drugName: 'Isotretinoin', + completedQuestionnaire: null, + case_numbers: [] + } + ], + (err: any, result: any) => { + if (err) console.log(err); + console.log('Inserted Pharmacist Met Requirements'); + } + ); } } diff --git a/src/server.ts b/src/server.ts index 7046f7dd..6250eddf 100644 --- a/src/server.ts +++ b/src/server.ts @@ -9,9 +9,6 @@ import { Globals } from './globals'; import { uid } from 'uid'; import { FhirUtilities } from './fhir/utilities'; - - - const logger = container.get('application'); const initialize = (config: any) => { @@ -26,7 +23,6 @@ const initialize = (config: any) => { .registerCdsHooks(config.server) .configureEtasuEndpoints() .setErrorRoutes(); - }; /** @@ -75,8 +71,8 @@ class REMSServer extends Server { log ? log : morgan('combined', { - stream: { write: message => logger.log(level, message) } - }) + stream: { write: message => logger.log(level, message) } + }) ); return this; @@ -113,29 +109,32 @@ class REMSServer extends Server { const metRequirementsCollection = db.collection('met-requirements'); const remsCaseCollection = db.collection('rems-case'); - // etasu endpoints + // etasu endpoints this.app.get('/etasu/:drug', (req: any, res: { send: (arg0: string) => any }) => { - medicationCollection.findOne({ 'name': req.params.drug }, (err: any, drug: any) => { + medicationCollection.findOne({ name: req.params.drug }, (err: any, drug: any) => { if (err) throw err; res.send(drug); }); - } - ); + }); this.app.get('/etasu/met/:caseId', (req: any, res: { send: (arg0: string) => any }) => { - remsCaseCollection.findOne({ 'case_number': req.params.caseId }, (err: any, remsCase: any) => { + remsCaseCollection.findOne({ case_number: req.params.caseId }, (err: any, remsCase: any) => { if (err) throw err; res.send(remsCase); }); - } - ); + }); - this.app.get('/etasu/met/patient/:patientName/drug/:drugName', (req: any, res: { send: (arg0: string) => any }) => { - remsCaseCollection.findOne({ patientName: req.params.patientName, drugName: req.params.drugName }, (err: any, remsCase: any) => { - if (err) throw err; - res.send(remsCase); - }); - } + this.app.get( + '/etasu/met/patient/:patientName/drug/:drugName', + (req: any, res: { send: (arg0: string) => any }) => { + remsCaseCollection.findOne( + { patientName: req.params.patientName, drugName: req.params.drugName }, + (err: any, remsCase: any) => { + if (err) throw err; + res.send(remsCase); + } + ); + } ); this.app.post('/etasu/reset', async (req: any, res: { send: (arg0: string) => any }) => { @@ -146,8 +145,7 @@ class REMSServer extends Server { console.log('Resetting the database'); await FhirUtilities.populateDB(); res.send('reset etasu database collections'); - } - ); + }); this.app.post('/etasu/met', async (req: any, res: { send: (arg0: string) => any }) => { try { @@ -157,7 +155,10 @@ class REMSServer extends Server { const requestBody = req.body; // extract params and questionnaire response identifier - const params = this.getResource(requestBody, requestBody.entry[0].resource.focus.parameters.reference); + const params = this.getResource( + requestBody, + requestBody.entry[0].resource.focus.parameters.reference + ); const questionnaireResponse = this.getQuestionnaireResponse(requestBody); const questionnaireStringArray = questionnaireResponse.questionnaire.split('/'); const requirementId = questionnaireStringArray[questionnaireStringArray.length - 1]; @@ -170,11 +171,9 @@ class REMSServer extends Server { for (const param of params.parameter) { if (param.name === 'prescription') { prescriptionReference = param.reference; - } - else if (param.name === 'prescriber') { + } else if (param.name === 'prescriber') { practitionerReference = param.reference; - } - else if (param.name === 'pharmacy') { + } else if (param.name === 'pharmacy') { pharmacistReference = param.reference; } else if (param.name === 'source-patient') { patientReference = param.reference; @@ -188,16 +187,23 @@ class REMSServer extends Server { const patient = this.getResource(requestBody, patientReference); const patientName = patient.name[0].given[0] + ' ' + patient.name[0].family; - const drug = await medicationCollection.findOne({ code: prescriptionCode, codeSystem: prescriptionSystem }); + const drug = await medicationCollection.findOne({ + code: prescriptionCode, + codeSystem: prescriptionSystem + }); // iterate through each requirement of the drug for (const requirement of drug.requirements) { - // figure out which stakeholder the req corresponds to + // figure out which stakeholder the req corresponds to const reqStakeholder = requirement.stakeholderType; - const reqStakeholderReference = reqStakeholder === 'prescriber' ? practitionerReference : (reqStakeholder === 'pharmacist' ? pharmacistReference : patientReference); + const reqStakeholderReference = + reqStakeholder === 'prescriber' + ? practitionerReference + : reqStakeholder === 'pharmacist' + ? pharmacistReference + : patientReference; // if the requirement is the one submitted continue if (requirement.resourceId === requirementId) { - // if the req submitted is a patient enrollment form and requires creating a new case if (requirement.createNewCase) { returnRemsRequest = true; @@ -210,7 +216,7 @@ class REMSServer extends Server { status: remsRequestCompletedStatus, drugName: drug.name, patientName: patientName, - metRequirements: [], + metRequirements: [] }; returnRemsRequest = true; @@ -222,48 +228,54 @@ class REMSServer extends Server { requirementDescription: requirement.description, drugName: drug.name, stakeholderId: reqStakeholderReference, - case_numbers: [case_number], + case_numbers: [case_number] }; await metRequirementsCollection.insertOne(metReq); const matchedMetReq = await metRequirementsCollection.findOne(metReq); + remsRequest.metRequirements.push({ + stakeholderId: matchedMetReq.stakeholderId, + completed: matchedMetReq.completed, + metRequirementId: matchedMetReq._id, + requirementName: matchedMetReq.requirementName, + requirementDescription: matchedMetReq.requirementDescription + }); - remsRequest.metRequirements.push( - { - stakeholderId: matchedMetReq.stakeholderId, - completed: matchedMetReq.completed, - metRequirementId: matchedMetReq._id, - requirementName: matchedMetReq.requirementName, - requirementDescription: matchedMetReq.requirementDescription, - } - ); - - // iterate through all other reqs again to create corresponding false metReqs / assign to existing + // iterate through all other reqs again to create corresponding false metReqs / assign to existing for (const requirement2 of drug.requirements) { // skip if the req found is the same as in the outer loop and has already been processed if (!(requirement2.resourceId === requirementId)) { - // figure out which stakeholder the req corresponds to + // figure out which stakeholder the req corresponds to const reqStakeholder2 = requirement2.stakeholderType; - const reqStakeholder2Reference = reqStakeholder2 === 'prescriber' ? practitionerReference : (reqStakeholder2 === 'pharmacist' ? pharmacistReference : patientReference); - - const matchedMetReq2 = await metRequirementsCollection.findOne({ stakeholderId: reqStakeholder2Reference, requirementName: requirement2.name, drugName: drug.name }); + const reqStakeholder2Reference = + reqStakeholder2 === 'prescriber' + ? practitionerReference + : reqStakeholder2 === 'pharmacist' + ? pharmacistReference + : patientReference; + + const matchedMetReq2 = await metRequirementsCollection.findOne({ + stakeholderId: reqStakeholder2Reference, + requirementName: requirement2.name, + drugName: drug.name + }); if (matchedMetReq2) { - remsRequest.metRequirements.push( - { - stakeholderId: matchedMetReq2.stakeholderId, - completed: matchedMetReq2.completed, - metRequirementId: matchedMetReq2._id, - requirementName: matchedMetReq2.requirementName, - requirementDescription: matchedMetReq2.requirementDescription, - } - ); + remsRequest.metRequirements.push({ + stakeholderId: matchedMetReq2.stakeholderId, + completed: matchedMetReq2.completed, + metRequirementId: matchedMetReq2._id, + requirementName: matchedMetReq2.requirementName, + requirementDescription: matchedMetReq2.requirementDescription + }); if (!matchedMetReq2.completed) { remsRequestCompletedStatus = 'Pending'; } // matchedMetReq2.case_numbers.push(case_number); - await metRequirementsCollection.updateOne(matchedMetReq2, { $addToSet: { case_numbers: case_number } }); + await metRequirementsCollection.updateOne(matchedMetReq2, { + $addToSet: { case_numbers: case_number } + }); } else { // create the metReq that was submitted const newMetReq = { @@ -273,7 +285,7 @@ class REMSServer extends Server { requirementDescription: requirement2.description, drugName: drug.name, stakeholderId: reqStakeholder2Reference, - case_numbers: [case_number], + case_numbers: [case_number] }; remsRequestCompletedStatus = 'Pending'; @@ -282,16 +294,13 @@ class REMSServer extends Server { const newMetReqDoc = await metRequirementsCollection.findOne(newMetReq); - - remsRequest.metRequirements.push( - { - stakeholderId: newMetReqDoc.stakeholderId, - completed: newMetReqDoc.completed, - metRequirementId: newMetReqDoc._id, - requirementName: newMetReqDoc.requirementName, - requirementDescription: newMetReqDoc.requirementDescription, - } - ); + remsRequest.metRequirements.push({ + stakeholderId: newMetReqDoc.stakeholderId, + completed: newMetReqDoc.completed, + metRequirementId: newMetReqDoc._id, + requirementName: newMetReqDoc.requirementName, + requirementDescription: newMetReqDoc.requirementDescription + }); } } } @@ -300,19 +309,27 @@ class REMSServer extends Server { await remsCaseCollection.insertOne(remsRequest); returnedRemsRequestDoc = await remsCaseCollection.findOne(remsRequest); } else { - const matchedMetReq3 = await metRequirementsCollection.findOne({ stakeholderId: reqStakeholderReference, requirementName: requirement.name, drugName: drug.name }); + const matchedMetReq3 = await metRequirementsCollection.findOne({ + stakeholderId: reqStakeholderReference, + requirementName: requirement.name, + drugName: drug.name + }); if (matchedMetReq3) { // matchedMetReq3.completed = true; // matchedMetReq3.completedQuestionnaire = questionnaireResponse; if (!matchedMetReq3.completed) { - await metRequirementsCollection.updateOne(matchedMetReq3, { $set: { completed: true, completedQuestionnaire: questionnaireResponse } }); + await metRequirementsCollection.updateOne(matchedMetReq3, { + $set: { completed: true, completedQuestionnaire: questionnaireResponse } + }); - returnedMetReqDoc = await metRequirementsCollection.findOne({ _id: matchedMetReq3._id }); + returnedMetReqDoc = await metRequirementsCollection.findOne({ + _id: matchedMetReq3._id + }); // this should be an array returned via .find() - tried using $in but could not get it to work - using the first element for now as a work around since we only have one patient - const remsRequestToUpdate = await remsCaseCollection.findOne({ case_number: returnedMetReqDoc.case_numbers[0] }); - - + const remsRequestToUpdate = await remsCaseCollection.findOne({ + case_number: returnedMetReqDoc.case_numbers[0] + }); // ToDO: iterate over multiple remsRequests - right now there will only be one that matches, but with multiple patients in the system there could be more @@ -325,24 +342,24 @@ class REMSServer extends Server { if (req4.requirementName === matchedMetReq3.requirementName) { metReqArray[i].completed = true; req4.completed = true; - const update = await remsCaseCollection.updateOne({ _id: remsRequestToUpdate._id }, { $set: { metRequirements: metReqArray } }); + const update = await remsCaseCollection.updateOne( + { _id: remsRequestToUpdate._id }, + { $set: { metRequirements: metReqArray } } + ); } if (!req4.completed) { foundUncompleted = true; } } - if (!foundUncompleted && remsRequestToUpdate.status === 'Pending') { - await remsCaseCollection.updateOne(remsRequestToUpdate, { $set: { status: 'Approved' } }); + await remsCaseCollection.updateOne(remsRequestToUpdate, { + $set: { status: 'Approved' } + }); } - // } } - - - } else { // create the metReq that was submitted const newMetReq3 = { @@ -352,7 +369,7 @@ class REMSServer extends Server { requirementDescription: requirement.requirementDescription, drugName: drug.name, stakeholderId: reqStakeholderReference, - case_numbers: [], + case_numbers: [] }; await metRequirementsCollection.insertOne(newMetReq3); @@ -374,37 +391,36 @@ class REMSServer extends Server { } }); - return this; } - getResource(bundle: { entry: any[]; }, resourceReference: string) { + getResource(bundle: { entry: any[] }, resourceReference: string) { const temp = resourceReference.split('/'); const _resourceType = temp[0]; const _id = temp[1]; for (let i = 0; i < bundle.entry.length; i++) { - if ((bundle.entry[i].resource.resourceType === _resourceType) - && (bundle.entry[i].resource.id === _id)) { + if ( + bundle.entry[i].resource.resourceType === _resourceType && + bundle.entry[i].resource.id === _id + ) { return bundle.entry[i].resource; } } return null; } - getQuestionnaireResponse(bundle: { entry: any[]; }) { + getQuestionnaireResponse(bundle: { entry: any[] }) { const _resourceType = 'QuestionnaireResponse'; for (let i = 0; i < bundle.entry.length; i++) { - if ((bundle.entry[i].resource.resourceType === _resourceType)) { + if (bundle.entry[i].resource.resourceType === _resourceType) { return bundle.entry[i].resource; } } return null; } - - /** * @method listen * @description Start listening on the configured port From aae33107d71bc18ad1e091a2fc9fa4b0697ca5bb Mon Sep 17 00:00:00 2001 From: Sahil Malhotra Date: Tue, 14 Feb 2023 15:36:16 -0500 Subject: [PATCH 82/83] environment variables for pims --- docker-compose-dev.yml | 4 +++- docker-compose-porter.yml | 3 +++ docker-compose.yml | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 5d1f80ae..852873e9 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -90,7 +90,6 @@ services: environment: VSAC_API_KEY: ${VSAC_API_KEY} MONGO_HOSTNAME: mongodb://rems-admin-pims-root:rems-admin-pims-password@pims_remsadmin_mongo:27017 - volumes: - rems_dev_rems-sync:/REMS:nocopy # nocopy is important - rems_dev_rems-nodeModules:/REMS/node_modules @@ -104,6 +103,9 @@ services: ports: - "5050:5050" - "5051:5051" + environment: + REMS_ADMIN_BASE: http://rems-administrator:8090 + MONGO_HOSTNAME: mongodb://pims_remsadmin_mongo:27017/pims volumes: - rems_dev_pims-sync:/home/node/app/pims:nocopy - rems_dev_pims-nodeModules:/home/node/app/pims/node_modules diff --git a/docker-compose-porter.yml b/docker-compose-porter.yml index 67f11560..d1dd0031 100644 --- a/docker-compose-porter.yml +++ b/docker-compose-porter.yml @@ -67,6 +67,9 @@ services: pims: image: codexrems/pims:REMSvCurrent container_name: rems_dev_pims + environment: + REMS_ADMIN_BASE: http://rems-administrator:8090 + MONGO_HOSTNAME: mongodb://pims_remsadmin_mongo:27017/pims ports: - "5050:5050" - "5051:5051" diff --git a/docker-compose.yml b/docker-compose.yml index 53be10d3..c592b796 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -67,6 +67,9 @@ services: pims: image: codexrems/pims:REMSvCurrent container_name: rems_dev_pims + environment: + REMS_ADMIN_BASE: http://rems-administrator:8090 + MONGO_HOSTNAME: mongodb://pims_remsadmin_mongo:27017/pims ports: - "5050:5050" - "5051:5051" From a222850d790e16544c74d716df73eb9b9be28d94 Mon Sep 17 00:00:00 2001 From: kghoreshi Date: Tue, 14 Feb 2023 15:37:45 -0500 Subject: [PATCH 83/83] fix test --- src/server.test.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/server.test.ts b/src/server.test.ts index 0a8724ae..bdf4fa88 100644 --- a/src/server.test.ts +++ b/src/server.test.ts @@ -1,9 +1,25 @@ import { initialize, REMSServer } from './server'; import config from './config'; - +import { Globals } from './globals'; +import { Db, MongoClient } from 'mongodb'; describe('REMSServer class', () => { let server: REMSServer; + let connection: MongoClient; + let db: Db; + + beforeAll(async () => { + if (process.env.MONGO_URL) { + connection = await MongoClient.connect(process.env.MONGO_URL, {}); + db = await connection.db(process.env.MONGO_DB_NAME); + Globals.database = db; + } + }); + + afterAll(async () => { + await connection.close(); + }); + beforeEach(() => { jest.mock('morgan', () => jest.fn());