From df63826fed98547dbb0428bc4eb54dbf5b728c9b Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Tue, 20 Dec 2022 08:13:55 -0600 Subject: [PATCH 01/18] Make ribbon costs highlight unmet conditions --- src/data/layers/ribbon.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/data/layers/ribbon.tsx b/src/data/layers/ribbon.tsx index 03f598a..5b85488 100644 --- a/src/data/layers/ribbon.tsx +++ b/src/data/layers/ribbon.tsx @@ -60,8 +60,20 @@ const layer = createLayer(id, () => { title: "Make Ribbon", description: jsx(() => ( <> - Create another ribbon with {format(currentDyeCost.value)}{" "} - {currentDyeType.value.name} and {format(1e9)} {cloth.cloth.displayName} + Create another ribbon with{" "} + + {format(currentDyeCost.value)} {currentDyeType.value.name} + {" "} + and{" "} + + {format(1e9)} {cloth.cloth.displayName} +
{render(ribbonProgressBar)} From a0b60cb41f6542bf12e4c3ed48853e007074e5f2 Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Tue, 20 Dec 2022 08:16:45 -0600 Subject: [PATCH 02/18] Oops --- src/data/layers/ribbon.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/ribbon.tsx b/src/data/layers/ribbon.tsx index 5b85488..bc6a436 100644 --- a/src/data/layers/ribbon.tsx +++ b/src/data/layers/ribbon.tsx @@ -63,7 +63,7 @@ const layer = createLayer(id, () => { Create another ribbon with{" "} Date: Tue, 20 Dec 2022 08:16:45 -0600 Subject: [PATCH 03/18] Oops --- src/data/layers/ribbon.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/ribbon.tsx b/src/data/layers/ribbon.tsx index 5b85488..bc6a436 100644 --- a/src/data/layers/ribbon.tsx +++ b/src/data/layers/ribbon.tsx @@ -63,7 +63,7 @@ const layer = createLayer(id, () => { Create another ribbon with{" "} Date: Tue, 20 Dec 2022 23:39:37 +0000 Subject: [PATCH 04/18] fix a ton of stuff --- src/data/layers/dyes.tsx | 8 ++++---- src/data/layers/letters.tsx | 4 ---- src/data/layers/oil.tsx | 4 ++++ src/data/layers/toys.tsx | 16 ++++++++-------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/data/layers/dyes.tsx b/src/data/layers/dyes.tsx index ce6677c..0f132af 100644 --- a/src/data/layers/dyes.tsx +++ b/src/data/layers/dyes.tsx @@ -494,12 +494,12 @@ const layer = createLayer(id, function (this: BaseLayer) { key: "a", costs: () => [ { - base: "1e42", + base: "1e60", root: 5, res: trees.logs }, { - base: computed(() => (upgrades.yellowDyeUpg2.bought.value ? "1e15" : "2e15")), + base: computed(() => (upgrades.yellowDyeUpg2.bought.value ? "1e17" : "2e17")), root: 2, res: oil.oil } @@ -507,10 +507,10 @@ const layer = createLayer(id, function (this: BaseLayer) { listedBoosts: [ { visible: true, - desc: computed(() => `*${format(boosts.black1.value)} letters processed.`) + desc: computed(() => `*${format(boosts.black1.value)} oil gain.`) } ], - dyesToReset: [] + dyesToReset: [], }), orange: createDye({ name: "Orange Dye", diff --git a/src/data/layers/letters.tsx b/src/data/layers/letters.tsx index 22c2272..d7bb010 100644 --- a/src/data/layers/letters.tsx +++ b/src/data/layers/letters.tsx @@ -215,10 +215,6 @@ const layer = createLayer(id, function (this: BaseLayer) { createMultiplicativeModifier(() => ({ multiplier: () => Decimal.div(paperBuyable.amount.value, 2).add(1), description: "Printed Labels" - })), - createMultiplicativeModifier(() => ({ - multiplier: () => dyes.boosts.black1.value, - description: "Black Dye Boost" })) ]); diff --git a/src/data/layers/oil.tsx b/src/data/layers/oil.tsx index 40d2000..46e367a 100644 --- a/src/data/layers/oil.tsx +++ b/src/data/layers/oil.tsx @@ -947,6 +947,10 @@ const layer = createLayer(id, function (this: BaseLayer) { multiplier: 2, description: "Cocoa Level 3", enabled: management.elfTraining.oilElfTraining.milestones[2].earned + })), + createMultiplicativeModifier(() => ({ + multiplier: () => dyes.boosts.black1.value, + description: "Black Dye Boost" })) ]) as WithRequired; const computedOilSpeed = computed(() => oilSpeed.apply(0)); diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index 97c197d..a211714 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -59,14 +59,14 @@ const layer = createLayer(id, function (this: BaseLayer) { const clothesCost = computed(() => { let clothFactor = Decimal.add(1, clothesBuyable.amount.value); - if (milestones.milestone1.earned) { + if (milestones.milestone1.earned.value) { clothFactor = clothFactor.div( Decimal.div(workshop.foundationProgress.value, 100).floor() ); } return { - cloth: clothFactor.mul(1e8), - dye: clothFactor.mul(1e6) + cloth: clothFactor.mul(1e12), + dye: clothFactor.mul(1e14) }; }); const clothesBuyable = createBuyable(() => ({ @@ -100,13 +100,13 @@ const layer = createLayer(id, function (this: BaseLayer) { })) as GenericBuyable; const woodenBlocksCost = computed(() => { let woodFactor = Decimal.add(1, woodenBlocksBuyable.amount.value).pow(5); - if (milestones.milestone1.earned) { + if (milestones.milestone1.earned.value) { woodFactor = woodFactor.div( Decimal.div(workshop.foundationProgress.value, 100).floor() ); } return { - wood: woodFactor.mul(1e40) + wood: woodFactor.mul(1e63) }; }); const woodenBlocksBuyable = createBuyable(() => ({ @@ -133,15 +133,15 @@ const layer = createLayer(id, function (this: BaseLayer) { const trucksCost = computed(() => { let factor = Decimal.add(1, trucksBuyable.amount.value).pow(3); let plasticFactor = Decimal.add(1, trucksBuyable.amount.value); - if (milestones.milestone1.earned) { + if (milestones.milestone1.earned.value) { factor = factor.div(Decimal.div(workshop.foundationProgress.value, 100).floor()); plasticFactor = plasticFactor.div( Decimal.div(workshop.foundationProgress.value, 100).floor() ); } return { - metal: factor.mul(1e25), - plastic: plasticFactor.mul(1e10) + metal: factor.mul(1e43), + plastic: plasticFactor.mul(1e15) }; }); const trucksBuyable = createBuyable(() => ({ From 6a625f2fb86a6c8a413f13396ba3dd96d1c35bee Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Wed, 21 Dec 2022 00:07:40 +0000 Subject: [PATCH 05/18] workshop scaling --- src/data/layers/dyes.tsx | 2 ++ src/data/layers/toys.tsx | 8 ++++---- src/data/layers/workshop.tsx | 10 ++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/data/layers/dyes.tsx b/src/data/layers/dyes.tsx index 0f132af..4eb5246 100644 --- a/src/data/layers/dyes.tsx +++ b/src/data/layers/dyes.tsx @@ -35,6 +35,7 @@ import management from "./management"; import oil from "./oil"; import paper from "./paper"; import trees from "./trees"; +import toys from "./toys"; interface Dye { name: string; @@ -511,6 +512,7 @@ const layer = createLayer(id, function (this: BaseLayer) { } ], dyesToReset: [], + visibility: () => showIf(toys.milestones.milestone2.earned.value) }), orange: createDye({ name: "Orange Dye", diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index a211714..79ee3c5 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -65,8 +65,8 @@ const layer = createLayer(id, function (this: BaseLayer) { ); } return { - cloth: clothFactor.mul(1e12), - dye: clothFactor.mul(1e14) + cloth: clothFactor.mul(1e13), + dye: clothFactor.mul(2e14) }; }); const clothesBuyable = createBuyable(() => ({ @@ -141,7 +141,7 @@ const layer = createLayer(id, function (this: BaseLayer) { } return { metal: factor.mul(1e43), - plastic: plasticFactor.mul(1e15) + plastic: plasticFactor.mul(1e14) }; }); const trucksBuyable = createBuyable(() => ({ @@ -256,7 +256,7 @@ const layer = createLayer(id, function (this: BaseLayer) { const { total: totalToys, trackerDisplay } = setUpDailyProgressTracker({ resource: toySum, - goal: 200, + goal: 2000, name, day, background: { diff --git a/src/data/layers/workshop.tsx b/src/data/layers/workshop.tsx index 677edf8..1b6ea38 100644 --- a/src/data/layers/workshop.tsx +++ b/src/data/layers/workshop.tsx @@ -74,6 +74,16 @@ const layer = createLayer(id, function (this: BaseLayer) { exponent: 1 / 0.99, description: "Holly Level 5", enabled: management.elfTraining.cutterElfTraining.milestones[4].earned + })), + createExponentialModifier(() => ({ + exponent: 0.1, + description: "Scaling Jump at 1000%", + enabled: computed(() => Decimal.gte(foundationProgress.value, 1000)) + })), + createMultiplicativeModifier(() => ({ + multiplier: 6969, // note: 6969 is a magic number. Don't touch this or it'll self-destruct. + description: "Scaling Jump at 1000%", + enabled: computed(() => Decimal.gte(foundationProgress.value, 1000)) })) ]) })); From 2cf4e58e5e8cccf55a19ac4b27bcfaeccb5a0204 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Wed, 21 Dec 2022 00:23:02 +0000 Subject: [PATCH 06/18] rest of day 17 stuff --- src/data/layers/oil.tsx | 6 ++++++ src/data/layers/plastic.tsx | 6 ++++++ src/data/layers/toys.tsx | 19 +++++++++++++++++-- src/data/layers/wrapping-paper.tsx | 3 ++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/data/layers/oil.tsx b/src/data/layers/oil.tsx index 46e367a..4b5f00c 100644 --- a/src/data/layers/oil.tsx +++ b/src/data/layers/oil.tsx @@ -40,6 +40,7 @@ import management from "./management"; import workshop from "./workshop"; import { WithRequired } from "util/common"; import { ElfBuyable } from "./elves"; +import toys from "./toys"; const id = "oil"; const day = 9; @@ -951,6 +952,11 @@ const layer = createLayer(id, function (this: BaseLayer) { createMultiplicativeModifier(() => ({ multiplier: () => dyes.boosts.black1.value, description: "Black Dye Boost" + })), + createMultiplicativeModifier(() => ({ + multiplier: 50, + description: "350 toys", + enabled: toys.milestones.milestone4.earned.value })) ]) as WithRequired; const computedOilSpeed = computed(() => oilSpeed.apply(0)); diff --git a/src/data/layers/plastic.tsx b/src/data/layers/plastic.tsx index 170f25c..27499b2 100644 --- a/src/data/layers/plastic.tsx +++ b/src/data/layers/plastic.tsx @@ -36,6 +36,7 @@ import metal from "./metal"; import oil from "./oil"; import paper from "./paper"; import workshop from "./workshop"; +import toys from "./toys"; const id = "plastic"; const day = 10; @@ -373,6 +374,11 @@ const layer = createLayer(id, function (this: BaseLayer) { multiplier: () => Decimal.div(buildRefinery.amount.value, 100).add(1), description: "Tinsel Level 4", enabled: management.elfTraining.plasticElfTraining.milestones[3].earned + })), + createMultiplicativeModifier(() => ({ + multiplier: 50, + description: "400 toys", + enabled: toys.milestones.milestone4.earned.value })) ]); const computedPlasticGain = computed(() => plasticGain.apply(0)); diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index 79ee3c5..f5d9612 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -215,7 +215,22 @@ const layer = createLayer(id, function (this: BaseLayer) { }, shouldEarn: () => Decimal.gte(toySum.value, 100) })); - const milestones = { milestone1, milestone2 }; + + const milestone3 = createMilestone(() => ({ + display: { + requirement: "200 toys", + effectDisplay: "Beach wrapping paper is much more powerful." + }, + shouldEarn: () => Decimal.gte(toySum.value, 200) + })); + const milestone4 = createMilestone(() => ({ + display: { + requirement: "350 toys", + effectDisplay: "Gain 50x oil and plastic." + }, + shouldEarn: () => Decimal.gte(toySum.value, 350) + })); + const milestones = { milestone1, milestone2, milestone3, milestone4 }; const { collapseMilestones, display: milestonesDisplay } = createCollapsibleMilestones(milestones); @@ -256,7 +271,7 @@ const layer = createLayer(id, function (this: BaseLayer) { const { total: totalToys, trackerDisplay } = setUpDailyProgressTracker({ resource: toySum, - goal: 2000, + goal: 500, name, day, background: { diff --git a/src/data/layers/wrapping-paper.tsx b/src/data/layers/wrapping-paper.tsx index 0622348..9c30853 100644 --- a/src/data/layers/wrapping-paper.tsx +++ b/src/data/layers/wrapping-paper.tsx @@ -16,6 +16,7 @@ import { computed, Ref, unref, watchEffect } from "vue"; import { main } from "../projEntry"; import { default as dyes, type enumColor } from "./dyes"; import elves from "./elves"; +import toys from "./toys"; const id = "wrappingPaper"; const day = 15; @@ -277,7 +278,7 @@ const layer = createLayer(id, () => { beach1: computed(() => main.isMastery.value ? 1 - : Decimal.add(wrappingPaper.beach.buyable.amount.value, 1).log10().add(1) + : Decimal.add(wrappingPaper.beach.buyable.amount.value, 1).log10().add(1).pow(toys.milestones.milestone3.earned.value ? 1.6 : 1) ) }; const wrappingPaperSum = createResource( From 993db57bfe9b3615b2e35a5b36ade530d63db1ab Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Wed, 21 Dec 2022 00:25:05 +0000 Subject: [PATCH 07/18] fix typo --- src/data/layers/plastic.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/plastic.tsx b/src/data/layers/plastic.tsx index 27499b2..d8a070c 100644 --- a/src/data/layers/plastic.tsx +++ b/src/data/layers/plastic.tsx @@ -377,7 +377,7 @@ const layer = createLayer(id, function (this: BaseLayer) { })), createMultiplicativeModifier(() => ({ multiplier: 50, - description: "400 toys", + description: "350 toys", enabled: toys.milestones.milestone4.earned.value })) ]); From 1b3187f60cdfc654aadf42b313c946e7851444f0 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Tue, 20 Dec 2022 16:43:38 -0800 Subject: [PATCH 08/18] Create Day 16 Complete.txt --- saves/Day 16 Complete.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 saves/Day 16 Complete.txt diff --git a/saves/Day 16 Complete.txt b/saves/Day 16 Complete.txt new file mode 100644 index 0000000..aac9e17 --- /dev/null +++ b/saves/Day 16 Complete.txt @@ -0,0 +1 @@ +eyJpZCI6ImFkdmVudC1pbmNyZW1lbnRhbC0wIiwiZGV2U3BlZWQiOjAsIm5hbWUiOiJEZWZhdWx0IFNhdmUiLCJ0YWJzIjpbIm1haW4iLCJ3cmFwcGluZ1BhcGVyIiwidHJlZXMiLCJtZXRhbCIsImR5ZXMiLCJyaWJib24iLCJvaWwiLCJjb2FsIiwicGxhc3RpYyIsImxldHRlcnMiXSwidGltZSI6MTY3MTUxODE2NDAyNCwiYXV0b3NhdmUiOnRydWUsIm9mZmxpbmVQcm9kIjpmYWxzZSwib2ZmbGluZVRpbWUiOm51bGwsInRpbWVQbGF5ZWQiOjg2ODQ0LjM3NDUxOTM0MjU3LCJrZWVwR29pbmciOmZhbHNlLCJtb2RJRCI6ImFkdmVudC1pbmNyZW1lbnRhbCIsIm1vZFZlcnNpb24iOiIwLjUiLCJsYXllcnMiOnsibWFpbiI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJkYXlzIjp7IjAiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMSI6eyJvcGVuZWQiOnRydWUsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCIyIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjMiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiNCI6eyJvcGVuZWQiOnRydWUsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCI1Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjYiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiNyI6eyJvcGVuZWQiOnRydWUsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCI4Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjkiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTAiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTEiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTIiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTMiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTQiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTUiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTYiOnsib3BlbmVkIjpmYWxzZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjE3Ijp7Im9wZW5lZCI6ZmFsc2UsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCIxOCI6eyJvcGVuZWQiOmZhbHNlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTkiOnsib3BlbmVkIjpmYWxzZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjIwIjp7Im9wZW5lZCI6ZmFsc2UsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCIyMSI6eyJvcGVuZWQiOmZhbHNlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMjIiOnsib3BlbmVkIjpmYWxzZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjIzIjp7Im9wZW5lZCI6ZmFsc2UsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9fSwiZGF5IjoxNywiaXNNYXN0ZXJ5IjpmYWxzZX0sInRyZWVzIjp7Im1pbmltaXplZCI6ZmFsc2UsImxvZ3MiOiIyLjM1NjkzMDU5ODQxMjMwMzVlNjMiLCJ0b3RhbExvZ3MiOiIxLjYzNDUzMjAyNzMzMjIyNjhlNjQiLCJ0cmVlcyI6IjEwIiwic2FwbGluZ3MiOiI3Ljc0MTYwNTIxNzUxOTAwNGUyNCIsInJvdzFVcGdyYWRlcyI6eyIwIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfSwiMSI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sIjIiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9LCIzIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfSwiNCI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX19LCJyb3cyVXBncmFkZXMiOnsiMCI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sIjEiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9LCIyIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfSwiMyI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sIjQiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9fSwicm93MUJ1eWFibGVzIjp7IjAiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiIyNzA0NjM3In0sIjEiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiIyNzgzNjE0In0sIjIiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiI1MjkyNDYzIn19LCJtYW51YWxDdXRQcm9ncmVzcyI6IjAuMDAwMDAxOTA3MzQ4NjMyODEyNDk5NCIsIm1hbnVhbFBsYW50UHJvZ3Jlc3MiOiIwLjAwMDAwMTkwNzM0ODYzMjgxMjQ5OTQiLCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwiY3JlYXRlZFNhcGxpbmdzIjoiMS4xMjI2NjYyMjM1NTM3NjkyZTI1IiwibWFzdGVyeSI6eyJsb2dzIjoiNC44NzIxNTI2NTU1MjE0MDhlMjMiLCJ0b3RhbExvZ3MiOiI0LjkyODMzODg0MDQwMTMyZTIzIiwic2FwbGluZ3MiOiI2NTM3NTA1Mjc0ODM2OC44MyIsInJvdzFVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzJVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzFCdXlhYmxlcyI6eyIwIjp7ImFtb3VudCI6IjExMzI5NSJ9LCIxIjp7ImFtb3VudCI6IjExMzI5NSJ9LCIyIjp7ImFtb3VudCI6IjMzNTgyNyJ9fSwiY3JlYXRlZFNhcGxpbmdzIjoiNjUzNzU4MzUwNzcyMDEuNTE2In0sIm1hc3RlcmVkIjp0cnVlfSwid29ya3Nob3AiOnsibWluaW1pemVkIjpmYWxzZSwiZm91bmRhdGlvblByb2dyZXNzIjoiMTAwMCIsImZvdW5kYXRpb25Db252ZXJzaW9uIjp7ImJhc2VSZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImdhaW5SZXNvdXJjZSI6IjEwMCJ9LCJtaWxlc3RvbmVzIjp7ImxvZ0dhaW5NaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9DdXRNaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9QbGFudE1pbGVzdG9uZTEiOnsiZWFybmVkIjp0cnVlfSwiYXV0b0N1dE1pbGVzdG9uZTIiOnsiZWFybmVkIjp0cnVlfSwiYXV0b1BsYW50TWlsZXN0b25lMiI6eyJlYXJuZWQiOnRydWV9LCJsb2dHYWluTWlsZXN0b25lMiI6eyJlYXJuZWQiOnRydWV9LCJtb3JlUGxhbnRzTWlsZXN0b25lMSI6eyJlYXJuZWQiOnRydWV9LCJsb2dHYWluTWlsZXN0b25lMyI6eyJlYXJuZWQiOnRydWV9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTEiOnsiZWFybmVkIjp0cnVlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmUyIjp7ImVhcm5lZCI6dHJ1ZX0sImV4dHJhRXhwYW5zaW9uTWlsZXN0b25lMyI6eyJlYXJuZWQiOnRydWV9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTQiOnsiZWFybmVkIjp0cnVlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmU1Ijp7ImVhcm5lZCI6dHJ1ZX19LCJjb2xsYXBzZU1pbGVzdG9uZXMiOnRydWUsIm1hc3RlcnkiOnsiZm91bmRhdGlvblByb2dyZXNzIjoiMTAwIiwibWlsZXN0b25lcyI6eyJsb2dHYWluTWlsZXN0b25lMSI6eyJlYXJuZWQiOnRydWV9LCJhdXRvQ3V0TWlsZXN0b25lMSI6eyJlYXJuZWQiOnRydWV9LCJhdXRvUGxhbnRNaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9DdXRNaWxlc3RvbmUyIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9QbGFudE1pbGVzdG9uZTIiOnsiZWFybmVkIjp0cnVlfSwibG9nR2Fpbk1pbGVzdG9uZTIiOnsiZWFybmVkIjp0cnVlfSwibW9yZVBsYW50c01pbGVzdG9uZTEiOnsiZWFybmVkIjp0cnVlfSwibG9nR2Fpbk1pbGVzdG9uZTMiOnsiZWFybmVkIjp0cnVlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmUxIjp7ImVhcm5lZCI6ZmFsc2V9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTIiOnsiZWFybmVkIjpmYWxzZX0sImV4dHJhRXhwYW5zaW9uTWlsZXN0b25lMyI6eyJlYXJuZWQiOmZhbHNlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmU0Ijp7ImVhcm5lZCI6ZmFsc2V9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTUiOnsiZWFybmVkIjpmYWxzZX19fSwibWFzdGVyZWQiOnRydWV9LCJjb2FsIjp7Im1pbmltaXplZCI6ZmFsc2UsImNvYWwiOiIzLjAzNTEwNjQ4NjUwODQ5MWUxMDgiLCJ0b3RhbENvYWwiOiI5Ljg5MTE1MjQyNzY0NzQzNGUxMDgiLCJhc2giOiIzLjYxMTI1NjM1NTk5NzUzMjRlODgiLCJhY3RpdmVGaXJlcyI6IjAiLCJidWlsZEZpcmUiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiIwIn0sImFjdGl2ZUJvbmZpcmVzIjoiNy4zMzU5NzE2MjE3MTIyNjNlMTgiLCJidWlsZEJvbmZpcmUiOnsicmVzb3VyY2UiOjAsImFtb3VudCI6IjcuMzM1OTcxNjIxNzEyMjYzZTE4In0sImFjdGl2ZUtpbG5zIjoiNDU0OSIsImJ1aWxkS2lsbiI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImFtb3VudCI6IjQ1NDkifSwid2FybWVyQ3V0dGVycyI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlfSwid2FybWVyUGxhbnRlcnMiOnsicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZX0sImJhc2ljRmVydGlsaXplciI6eyJyZXNvdXJjZSI6IjE0NTY4ODI2IiwiYm91Z2h0Ijp0cnVlfSwidW5sb2NrQm9uZmlyZSI6eyJyZXNvdXJjZSI6MCwiYm91Z2h0Ijp0cnVlfSwiZGVkaWNhdGVkQ3V0dGVycyI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlfSwiZGVkaWNhdGVkUGxhbnRlcnMiOnsicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZX0sImJldHRlckZlcnRpbGl6ZXIiOnsiYm91Z2h0Ijp0cnVlfSwidW5sb2NrS2lsbiI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sImhlYXRlZEN1dHRlcnMiOnsicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImFtb3VudCI6IjEwMDgzNDAzOTg4In0sImhlYXRlZFBsYW50ZXJzIjp7InJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJhbW91bnQiOiIxMDA4MzQwMzk4OCJ9LCJtb3JlRmVydGlsaXplciI6eyJyZXNvdXJjZSI6IjE0NTY4ODI2IiwiYW1vdW50IjoiNDE0Njg4OTgyMzQ2In0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJhY3RpdmVEcmlsbHMiOiIyMzc5IiwiYnVpbGREcmlsbCI6eyJhbW91bnQiOiIyMzc5In0sImVmZmljaWVudFNtZWx0aGVyIjp7InJlc291cmNlIjoiMS4zMzY0Nzc3OTEzMjgyNTJlMTciLCJib3VnaHQiOnRydWV9LCJhcnNvbmlzdEFzc2lzdGFuY2UiOnsiYm91Z2h0Ijp0cnVlfSwicmVmaW5lZENvYWwiOnsiYm91Z2h0Ijp0cnVlfSwiY29sb3JlZEZpcmUiOnsiYm91Z2h0Ijp0cnVlfSwibWFzdGVyeSI6eyJjb2FsIjoiOS4wNjI4MTE3NjcyMDc1NDVlMzMiLCJ0b3RhbENvYWwiOiI5LjA2ODkyMjg3ODMxODUzNWUzMyIsImFzaCI6IjIuNjc1MjQzNDc4NzMyMTg4ZTE3IiwiYWN0aXZlRmlyZXMiOiIxMDYxLjg4NTM4NTQ3NTUyOTgiLCJidWlsZEZpcmUiOnsiYW1vdW50IjoiMTA2MS44ODUzODU0NzU1Mjk4In0sImFjdGl2ZUJvbmZpcmVzIjoiMjAwNTAzIiwiYnVpbGRCb25maXJlIjp7ImFtb3VudCI6IjIwMDUwMyJ9LCJhY3RpdmVLaWxucyI6IjY3MSIsImJ1aWxkS2lsbiI6eyJhbW91bnQiOiI2NzEifSwiYWN0aXZlRHJpbGxzIjoiMTY1IiwiYnVpbGREcmlsbCI6eyJhbW91bnQiOiIxNjUifSwid2FybWVyQ3V0dGVycyI6eyJib3VnaHQiOnRydWV9LCJ3YXJtZXJQbGFudGVycyI6eyJib3VnaHQiOnRydWV9LCJiYXNpY0ZlcnRpbGl6ZXIiOnsiYm91Z2h0Ijp0cnVlfSwidW5sb2NrQm9uZmlyZSI6eyJib3VnaHQiOnRydWV9LCJkZWRpY2F0ZWRDdXR0ZXJzIjp7ImJvdWdodCI6dHJ1ZX0sImRlZGljYXRlZFBsYW50ZXJzIjp7ImJvdWdodCI6dHJ1ZX0sImJldHRlckZlcnRpbGl6ZXIiOnsiYm91Z2h0Ijp0cnVlfSwidW5sb2NrS2lsbiI6eyJib3VnaHQiOnRydWV9LCJlZmZpY2llbnRTbWVsdGhlciI6eyJib3VnaHQiOnRydWV9LCJhcnNvbmlzdEFzc2lzdGFuY2UiOnsiYm91Z2h0IjpmYWxzZX0sInJlZmluZWRDb2FsIjp7ImJvdWdodCI6ZmFsc2V9LCJjb2xvcmVkRmlyZSI6eyJib3VnaHQiOmZhbHNlfSwiaGVhdGVkQ3V0dGVycyI6eyJhbW91bnQiOiI5Nzk4In0sImhlYXRlZFBsYW50ZXJzIjp7ImFtb3VudCI6Ijk3OTgifSwibW9yZUZlcnRpbGl6ZXIiOnsiYW1vdW50IjoiMjUzNSJ9fSwibWFzdGVyZWQiOnRydWV9LCJlbHZlcyI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJlbHZlcyI6eyJjdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDE0NzgwNTIxODAzNDM2OTIiLCJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlLCJidXlhYmxlIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjoiMzE5OCJ9LCJhbW91bnRPZlRpbWVzRG9uZSI6MC4xNzIwMDAwMDAyMDgyODU1NH0sInBsYW50ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA3MDI4Mzc2NTgzOTY0MDQ3IiwicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZSwiYnV5YWJsZSI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImFtb3VudCI6IjMxOTgifSwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMDA0MDAwMDAwMjA3OTM4MTE1fSwiZXhwYW5kZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDAzNDAzNTExODI3NTY5NjQ5NyIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImJ1eWFibGUiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiI3Mzc5In0sImFtb3VudE9mVGltZXNEb25lIjowLjk5MjAwMDAwMDIwNzk5NDV9LCJoZWF0ZWRDdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDEwNDAxMTEwNTU3NDMwMzE1IiwicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZSwiYnV5YWJsZSI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYW1vdW50IjoiMjcwIn0sImFtb3VudE9mVGltZXNEb25lIjowLjgwMDAwMDAwMDIwNzMwNTF9LCJoZWF0ZWRQbGFudGVyc0VsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAwNTEyOTUyNzM5ODcyNjE4NiIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImJ1eWFibGUiOnsicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImFtb3VudCI6IjI3MCJ9LCJhbW91bnRPZlRpbWVzRG9uZSI6MC43NjAwMDAwMDAyMDQ4NDA0fSwiZmVydGlsaXplckVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAxMzc0NTc5NDY5NzQ4MzkzNyIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImJ1eWFibGUiOnsicmVzb3VyY2UiOiIxNDU2ODgyNiIsImFtb3VudCI6IjEzOSJ9LCJhbW91bnRPZlRpbWVzRG9uZSI6MC4xNTYwMDAwMDAyMDQwMDI3M30sInNtYWxsRmlyZUVsZiI6eyJidXlhYmxlIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjowfSwidG9nZ2xlIjp0cnVlLCJidXlQcm9ncmVzcyI6IjAuMDAwNzYxMTQwNDIyNDIzNjQ1MSIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImFtb3VudE9mVGltZXNEb25lIjowLjkxMjAwMDAwMDIwMzQwNjF9LCJib25maXJlRWxmIjp7ImJ1eWFibGUiOnsicmVzb3VyY2UiOjAsImFtb3VudCI6MH0sInRvZ2dsZSI6dHJ1ZSwiYnV5UHJvZ3Jlc3MiOiIwLjAwMTQ5NjEwNDIwNTMyMzQyMyIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImFtb3VudE9mVGltZXNEb25lIjowLjA4MDAwMDAwMDIwNDg5MDR9LCJraWxuRWxmIjp7ImJ1eWFibGUiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiIxMDIifSwidG9nZ2xlIjp0cnVlLCJidXlQcm9ncmVzcyI6IjAuMDAwNzMwMjQ2NjU3NTg2Njk3MyIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImFtb3VudE9mVGltZXNEb25lIjowLjM1NjAwMDAwMDIwMzI1MjR9LCJwYXBlckVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAzODMzMzMzMzMzNTY5MTM5IiwiYm91Z2h0Ijp0cnVlLCJhbW91bnRPZlRpbWVzRG9uZSI6MC4xODAwMDAwMDAwMTgyMzc1N30sImJveEVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDA0MTUzMzAzMjE4NjUwMzQ1IiwiYm91Z2h0Ijp0cnVlLCJhbW91bnRPZlRpbWVzRG9uZSI6MC4zMTYwMDAwMDAwMDk4ODYxNX0sImNsb3RoRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA5NDk1MDEzNDU4NTkyNDk0IiwiYm91Z2h0Ijp0cnVlLCJhbW91bnRPZlRpbWVzRG9uZSI6MC45NjAwMDAwMDAyMjk2MTI3fSwibWluaW5nRHJpbGxFbGYiOnsidG9nZ2xlIjpmYWxzZSwiYnV5UHJvZ3Jlc3MiOjAsImFtb3VudE9mVGltZXNEb25lIjowLCJib3VnaHQiOmZhbHNlfSwiaGVhdnlEcmlsbEVsZiI6eyJ0b2dnbGUiOnRydWUsImJ1eVByb2dyZXNzIjoiMC4wMDA2NDQ3NDQ4ODk3OTMxNTg1IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNDgwMDAwMDAwMDk0NTQ4OCwiYm91Z2h0Ijp0cnVlfSwib2lsRWxmIjp7InRvZ2dsZSI6dHJ1ZSwiYnV5UHJvZ3Jlc3MiOiIwLjAwMTAyOTQxMTU2NTIyMTYyNzQiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC43NDQwMDAwMDAwODk2NzAzLCJib3VnaHQiOnRydWV9LCJtZXRhbEVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAwOTM3MzY5MzEyODQ5ODIyOCIsImFtb3VudE9mVGltZXNEb25lIjowLjczMjAwMDAwMDA4OTM4NTYsImJvdWdodCI6dHJ1ZX0sImNvYWxEcmlsbEVsZiI6eyJ0b2dnbGUiOnRydWUsImJ1eVByb2dyZXNzIjoiMC4wMDA2NDUwMDAxNjg0NjQyNDkyIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMzgwMDAwMDAwMTA2OTE3OSwiYm91Z2h0Ijp0cnVlfSwiZHllRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDAzNTYxNjYwNjE4NjA5Nzk2NSIsImFtb3VudE9mVGltZXNEb25lIjowLjg1NjAwMDAwMDAwNzkzODQsImJvdWdodCI6dHJ1ZX0sInBsYXN0aWNFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMDkyMjY2Mjg5NDYwMDQxMjMiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC43MDQwMDAwMDAwMDI0OTQ2LCJib3VnaHQiOnRydWV9fSwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfSwiNSI6eyJlYXJuZWQiOnRydWV9LCI2Ijp7ImVhcm5lZCI6dHJ1ZX0sIjciOnsiZWFybmVkIjp0cnVlfSwiOCI6eyJlYXJuZWQiOnRydWV9LCI5Ijp7ImVhcm5lZCI6dHJ1ZX0sIjEwIjp7ImVhcm5lZCI6dHJ1ZX0sIjExIjp7ImVhcm5lZCI6dHJ1ZX19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwiY29sbGFwc2VNaWxlc3RvbmVzIjpmYWxzZSwibWFzdGVyeSI6eyJlbHZlcyI6eyJjdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA0MTMxNjU0NDIxNDE3MzMiLCJhbW91bnRPZlRpbWVzRG9uZSI6MS4wNDU5MTg5MDcwMzg4Njc1ZS0xMSwiYm91Z2h0Ijp0cnVlfSwicGxhbnRlcnNFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwNDE3ODU1MjQwNDQ3Njg3MSIsImFtb3VudE9mVGltZXNEb25lIjowLjQwODAwMDAwMDAxMjUyMSwiYm91Z2h0Ijp0cnVlfSwiZXhwYW5kZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDQyMTUwMjE3MzkzNzgxNTUiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC43OTQwMDAwMDAwMDc1MzU4LCJib3VnaHQiOnRydWV9LCJoZWF0ZWRDdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDE1MDM4Mjk4OTI4Mjc0MzUyIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMzAyMDAwMDAwMDQ2NDYyLCJib3VnaHQiOnRydWV9LCJoZWF0ZWRQbGFudGVyc0VsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAyNTk5Nzc2NTA5MzU4NjA5IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNzI2MDAwMDAwMDQ5NzkzOSwiYm91Z2h0Ijp0cnVlfSwiZmVydGlsaXplckVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAyMjMzNjY3MDQzMTIwMjgiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC41OTIwMDAwMDAwNDc3ODk5LCJib3VnaHQiOnRydWV9LCJzbWFsbEZpcmVFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMjg3MzA2MDg2NjAzMDM0MTQiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC44NzYwMDAwMDAwNDkyMDI4LCJ0b2dnbGUiOnRydWUsImJvdWdodCI6dHJ1ZX0sImJvbmZpcmVFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMTcyNzM2MjAzOTgxMTIyIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMjU4MDAwMDAwMDQ5ODg5OSwidG9nZ2xlIjp0cnVlLCJib3VnaHQiOnRydWV9LCJraWxuRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDE1MzM4NTUyOTg1NDA5OTgxIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNjk0MDAwMDAwMDUwMDM5LCJ0b2dnbGUiOnRydWUsImJvdWdodCI6dHJ1ZX0sInBhcGVyRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA4NDIwODY4MzQ3NDYyMDg1IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuODgwMDAwMDAwMDAwODg1NCwiYm91Z2h0Ijp0cnVlfSwiYm94RWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDUyOTQxMTc2NDcwNzI1NzciLCJhbW91bnRPZlRpbWVzRG9uZSI6MC4zMDQwMDAwMDAwMDA5MzI4NiwiYm91Z2h0Ijp0cnVlfSwiY2xvdGhFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMzg2MjUwOTgxOTA3NTQwNSIsImFtb3VudE9mVGltZXNEb25lIjowLjQzMjAwMDAwMDAwMjIzMzI2LCJib3VnaHQiOnRydWV9LCJjb2FsRHJpbGxFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAxMTQ1NDU0NTQ1NDU0NTI3MyIsImFtb3VudE9mVGltZXNEb25lIjowLjUwMzk5OTk5OTk5OTg4NzYsInRvZ2dsZSI6dHJ1ZSwiYm91Z2h0Ijp0cnVlfSwiaGVhdnlEcmlsbEVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDExNDU0NTQ1NDU0NTQ1MjczIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNTAzOTk5OTk5OTk5ODg3NiwidG9nZ2xlIjp0cnVlLCJib3VnaHQiOnRydWV9LCJvaWxFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAxMTQ1NDU0NTQ1NDU0NTI3MyIsImFtb3VudE9mVGltZXNEb25lIjowLjUwMzk5OTk5OTk5OTg4NzYsInRvZ2dsZSI6dHJ1ZSwiYm91Z2h0Ijp0cnVlfSwibWV0YWxFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAxMTQ1NDU0NTQ1NDU0NTI3MyIsImFtb3VudE9mVGltZXNEb25lIjowLjUwMzk5OTk5OTk5OTg4NzYsImJvdWdodCI6dHJ1ZX0sImR5ZUVsZiI6eyJidXlQcm9ncmVzcyI6MCwiYW1vdW50T2ZUaW1lc0RvbmUiOjAsImJvdWdodCI6ZmFsc2V9LCJwbGFzdGljRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDM1MzM3MDQ0NzEwNjE2MDUiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC45NDAwMDAwMDAwMDA3OTM1LCJib3VnaHQiOnRydWV9fSwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfSwiNSI6eyJlYXJuZWQiOnRydWV9LCI2Ijp7ImVhcm5lZCI6dHJ1ZX0sIjciOnsiZWFybmVkIjp0cnVlfSwiOCI6eyJlYXJuZWQiOnRydWV9LCI5Ijp7ImVhcm5lZCI6dHJ1ZX0sIjEwIjp7ImVhcm5lZCI6dHJ1ZX0sIjExIjp7ImVhcm5lZCI6dHJ1ZX19fX0sInBhcGVyIjp7Im1pbmltaXplZCI6ZmFsc2UsInBhcGVyIjoiNy4wNzEwMTc1MzE0NTQ1NjdlNzQiLCJ0b3RhbFBhcGVyIjoiMS43NDk3Nzk5MDcwNjQ0OTg0ZTc1IiwicGFwZXJDb252ZXJzaW9uIjp7ImdhaW5SZXNvdXJjZSI6IjQwNjkuOTk5OTk5OTk5OTk5In0sImJvb2tzIjp7ImN1dHRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNTIifSwicGxhbnRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNTIifSwiZXhwYW5kZXJzQm9vayI6eyJyZXNvdXJjZSI6IjQwNjkuOTk5OTk5OTk5OTk5IiwiYW1vdW50IjoiMTUyIn0sImhlYXRlZEN1dHRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNTIifSwiaGVhdGVkUGxhbnRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNTIifSwiZmVydGlsaXplckJvb2siOnsicmVzb3VyY2UiOiI0MDY5Ljk5OTk5OTk5OTk5OSIsImFtb3VudCI6IjE1MiJ9LCJzbWFsbEZpcmVCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNTIifSwiYm9uZmlyZUJvb2siOnsicmVzb3VyY2UiOiI0MDY5Ljk5OTk5OTk5OTk5OSIsImFtb3VudCI6IjE1MiJ9LCJraWxuQm9vayI6eyJyZXNvdXJjZSI6IjQwNjkuOTk5OTk5OTk5OTk5IiwiYW1vdW50IjoiMTUyIn0sInBhcGVyQm9vayI6eyJhbW91bnQiOiIxMSJ9LCJib3hCb29rIjp7ImFtb3VudCI6IjEzIn0sImNsb3RoQm9vayI6eyJhbW91bnQiOiIxNTIifSwibWluaW5nRHJpbGxCb29rIjp7ImFtb3VudCI6MH0sImhlYXZ5RHJpbGxCb29rIjp7ImFtb3VudCI6IjExOCJ9LCJvaWxCb29rIjp7ImFtb3VudCI6IjExOCJ9LCJtZXRhbEJvb2siOnsiYW1vdW50IjoiMTE4In0sImNvYWxEcmlsbEJvb2siOnsiYW1vdW50IjoiMTE4In0sImR5ZUJvb2siOnsiYW1vdW50IjowfSwicHJpbWFyeUR5ZUJvb2siOnsiYW1vdW50IjoiMTUyIn0sInNlY29uZGFyeUR5ZUJvb2siOnsiYW1vdW50IjoiMTUyIn0sInBsYXN0aWNCb29rIjp7ImFtb3VudCI6IjE1MiJ9fSwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sInVwZ3JhZGVzIjp7ImNsb3RoVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJkcmlsbGluZ1VwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwib2lsVXBncmFkZSI6eyJib3VnaHQiOnRydWV9fSwidXBncmFkZXMyIjp7ImFzaFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiYm9va1VwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiY2xhc3Nyb29tVXBncmFkZSI6eyJib3VnaHQiOmZhbHNlfSwidHJlZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfX0sIm1hc3RlcnkiOnsicGFwZXIiOiIzLjIzNDg3MjQwNDc0MjA0OWUyMyIsInRvdGFsUGFwZXIiOiIzLjIzNDg3NTMwMTUyMjI2NzhlMjMiLCJib29rcyI6eyJjdXR0ZXJzQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJwbGFudGVyc0Jvb2siOnsiYW1vdW50IjoiNDcifSwiZXhwYW5kZXJzQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJoZWF0ZWRDdXR0ZXJzQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJoZWF0ZWRQbGFudGVyc0Jvb2siOnsiYW1vdW50IjoiNDcifSwiZmVydGlsaXplckJvb2siOnsiYW1vdW50IjoiNDcifSwic21hbGxGaXJlQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJib25maXJlQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJraWxuQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJwYXBlckJvb2siOnsiYW1vdW50IjoiNyJ9LCJib3hCb29rIjp7ImFtb3VudCI6IjcifSwiY2xvdGhCb29rIjp7ImFtb3VudCI6IjQ3In0sImNvYWxEcmlsbEJvb2siOnsiYW1vdW50IjoiMSJ9LCJoZWF2eURyaWxsQm9vayI6eyJhbW91bnQiOiIxIn0sIm9pbEJvb2siOnsiYW1vdW50IjoiMSJ9LCJtZXRhbEJvb2siOnsiYW1vdW50IjoiMSJ9LCJwcmltYXJ5RHllQm9vayI6eyJhbW91bnQiOjB9LCJzZWNvbmRhcnlEeWVCb29rIjp7ImFtb3VudCI6MH0sInBsYXN0aWNCb29rIjp7ImFtb3VudCI6IjQ3In19LCJ1cGdyYWRlcyI6eyJjbG90aFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiZHJpbGxpbmdVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sIm9pbFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfX0sInVwZ3JhZGVzMiI6eyJhc2hVcGdyYWRlIjp7ImJvdWdodCI6ZmFsc2V9LCJib29rVXBncmFkZSI6eyJib3VnaHQiOmZhbHNlfSwidHJlZVVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX19fSwibWFzdGVyZWQiOnRydWV9LCJib3hlcyI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJib3hlcyI6IjQuMjM4NzUzMzc0NDgwODk1ZTYxIiwidG90YWxCb3hlcyI6IjEuOTY2MDEzMTc4NDI2NDA0ZTYyIiwiYm94ZXNDb252ZXJzaW9uIjp7ImJhc2VSZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImdhaW5SZXNvdXJjZSI6MH0sInVwZ3JhZGVzIjp7ImxvZ3NVcGdyYWRlIjp7InJlc291cmNlIjowLCJib3VnaHQiOnRydWV9LCJhc2hVcGdyYWRlIjp7InJlc291cmNlIjowLCJib3VnaHQiOnRydWV9LCJjb2FsVXBncmFkZSI6eyJyZXNvdXJjZSI6MCwiYm91Z2h0Ijp0cnVlfX0sImJ1eWFibGVzIjp7ImxvZ0JveGVzQnV5YWJsZSI6eyJyZXNvdXJjZSI6MCwiYW1vdW50IjoiNDYyIn0sImFzaEJveGVzQnV5YWJsZSI6eyJyZXNvdXJjZSI6MCwiYW1vdW50IjoiMjAyIn0sImNvYWxCb3hlc0J1eWFibGUiOnsicmVzb3VyY2UiOjAsImFtb3VudCI6IjE1NyJ9fSwicm93MlVwZ3JhZGVzIjp7Im9yZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sInBsYXN0aWNVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX19LCJyb3czVXBncmFkZXMiOnsiY2xvdGhVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sImR5ZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwieHBVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwiYnV5YWJsZXMyIjp7Im9yZUJveGVzQnV5YWJsZSI6eyJhbW91bnQiOiI5OSJ9LCJtZXRhbEJveGVzQnV5YWJsZSI6eyJhbW91bnQiOiI2NCJ9LCJwbGFzdGljQm94ZXNCdXlhYmxlIjp7ImFtb3VudCI6IjUzIn19LCJtYXN0ZXJ5Ijp7ImJveGVzIjoiNi4wMTQ5MDk4Nzg1NzU0MjllMTYiLCJ0b3RhbEJveGVzIjoiNi4wMTQ5MTM1Mjc1NDAxMzFlMTYiLCJ1cGdyYWRlcyI6eyJsb2dzVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJhc2hVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sImNvYWxVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX19LCJyb3cyVXBncmFkZXMiOnsib3JlVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJtZXRhbFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwicGxhc3RpY1VwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzNVcGdyYWRlcyI6eyJjbG90aFVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX0sImR5ZVVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX0sInhwVXBncmFkZSI6eyJib3VnaHQiOmZhbHNlfX0sImJ1eWFibGVzIjp7ImxvZ0JveGVzQnV5YWJsZSI6eyJhbW91bnQiOiI0NyJ9LCJhc2hCb3hlc0J1eWFibGUiOnsiYW1vdW50IjoiMzAifSwiY29hbEJveGVzQnV5YWJsZSI6eyJhbW91bnQiOiIyNSJ9fSwiYnV5YWJsZXMyIjp7Im9yZUJveGVzQnV5YWJsZSI6eyJhbW91bnQiOjB9LCJtZXRhbEJveGVzQnV5YWJsZSI6eyJhbW91bnQiOjB9LCJwbGFzdGljQm94ZXNCdXlhYmxlIjp7ImFtb3VudCI6MH19fSwibWFzdGVyZWQiOnRydWV9LCJtZXRhbCI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJvcmUiOiIxLjAwMTkwMzIxNDI1MTIzMzZlMjMiLCJiZXN0T3JlIjoiMS4wODgzNzA2OTMxNjA0NjU1ZTIzIiwib3JlUHJvZ3Jlc3MiOiIwLjk5Mzc5NzQxNzY3ODA3NiIsIm1ldGFsIjoiMy40ODcwNTg5MDE0NzM5NTkyZTQzIiwiYmVzdE1ldGFsIjoiMy40ODcwNTg5MDE0NzM5NTkyZTQzIiwidG90YWxNZXRhbCI6IjEuMjgxNTk3MjU0MjA0Nzc2OWU0NCIsInNpbXBsZVBpY2theGUiOnsiYm91Z2h0Ijp0cnVlfSwiZG91YmxlUGlja2F4ZSI6eyJib3VnaHQiOmZhbHNlfSwiY3J1Y2libGUiOnsiYm91Z2h0Ijp0cnVlfSwiY29hbERyaWxsIjp7ImJvdWdodCI6dHJ1ZX0sImluZHVzdHJpYWxGdXJuYWNlIjp7ImJvdWdodCI6dHJ1ZX0sIm9yZURyaWxsIjp7ImFtb3VudCI6IjMxMTEyMSJ9LCJpbmR1c3RyaWFsQ3J1Y2libGUiOnsiYW1vdW50IjoiMjg5MjQifSwiYXV0b1NtZWx0RW5hYmxlZCI6dHJ1ZSwiaG90dGVyRm9yZ2UiOnsiYW1vdW50IjoiMzgxODcifSwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sImVmZmljaWVudERyaWxsIjp7ImJvdWdodCI6dHJ1ZX0sIm1hc3RlcnkiOnsib3JlIjoiOTI3NTcyMTIwLjQ0MjYzNjUiLCJiZXN0T3JlIjoiMTk1MzMwOTAwNy4wNDQwOTgiLCJvcmVQcm9ncmVzcyI6IjAuNTMxMDMxMjY2MTM4MjM0NiIsIm1ldGFsIjoiMy42NTMyMjkxOTUxMTEwNGUxNiIsImJlc3RNZXRhbCI6IjMuNjUzMjI5MTk1MTExMDRlMTYiLCJ0b3RhbE1ldGFsIjoiMy42NTMyNTcwMzA2MzI0MDVlMTYiLCJzaW1wbGVQaWNrYXhlIjp7ImJvdWdodCI6dHJ1ZX0sImRvdWJsZVBpY2theGUiOnsiYm91Z2h0IjpmYWxzZX0sImNydWNpYmxlIjp7ImJvdWdodCI6dHJ1ZX0sImNvYWxEcmlsbCI6eyJib3VnaHQiOnRydWV9LCJpbmR1c3RyaWFsRnVybmFjZSI6eyJib3VnaHQiOnRydWV9LCJlZmZpY2llbnREcmlsbCI6eyJib3VnaHQiOnRydWV9LCJvcmVEcmlsbCI6eyJhbW91bnQiOiIyNzAifSwiaW5kdXN0cmlhbENydWNpYmxlIjp7ImFtb3VudCI6IjI3In0sImhvdHRlckZvcmdlIjp7ImFtb3VudCI6IjI0In19LCJtYXN0ZXJlZCI6dHJ1ZX0sImNsb3RoIjp7Im1pbmltaXplZCI6ZmFsc2UsImNsb3RoIjoiOTA4ODA2ODQ2OTYiLCJ0b3RhbENsb3RoIjoiMzkwNzg3OTEzOTg2Iiwid29vbCI6IjY1OTE0NTU4MzkzIiwic2hlZXAiOiI3MDYxNDc0MDc0OSIsImJ1aWxkUGVucyI6eyJhbW91bnQiOiI4MjU5In0sImJldHRlclNoZWFycyI6eyJhbW91bnQiOiI4MTEzIn0sImZhc3RlclNwaW5uaW5nIjp7ImFtb3VudCI6IjEyMTI0In0sInRyZWVzVXBncmFkZXMiOnsidHJlZXNVcGdyYWRlMyI6eyJib3VnaHQiOnRydWV9LCJ0cmVlc1VwZ3JhZGUyIjp7ImJvdWdodCI6dHJ1ZX0sInRyZWVzVXBncmFkZTEiOnsiYm91Z2h0Ijp0cnVlfSwidHJlZXNVcGdyYWRlNCI6eyJib3VnaHQiOnRydWV9fSwibWV0YWxVcGdyYWRlcyI6eyJtZXRhbFVwZ3JhZGUzIjp7ImJvdWdodCI6dHJ1ZX0sIm1ldGFsVXBncmFkZTIiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlMSI6eyJib3VnaHQiOnRydWV9LCJtZXRhbFVwZ3JhZGU0Ijp7ImJvdWdodCI6dHJ1ZX19LCJwYXBlclVwZ3JhZGVzIjp7InBhcGVyVXBncmFkZTMiOnsiYm91Z2h0Ijp0cnVlfSwicGFwZXJVcGdyYWRlMiI6eyJib3VnaHQiOnRydWV9LCJwYXBlclVwZ3JhZGUxIjp7ImJvdWdodCI6dHJ1ZX0sInBhcGVyVXBncmFkZTQiOnsiYm91Z2h0Ijp0cnVlfX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJicmVlZGluZ1Byb2dyZXNzIjoxLCJzaGVhcmluZ1Byb2dyZXNzIjoxLCJzcGlubmluZ1Byb2dyZXNzIjoxLCJtYXN0ZXJ5Ijp7ImNsb3RoIjoiMTExNDUxIiwidG90YWxDbG90aCI6IjExODkwMSIsIndvb2wiOiI2MjMyMCIsInNoZWVwIjoiNzY0MDMiLCJidWlsZFBlbnMiOnsiYW1vdW50IjoiMjQ4In0sImJldHRlclNoZWFycyI6eyJhbW91bnQiOiIzMTAifSwiZmFzdGVyU3Bpbm5pbmciOnsiYW1vdW50IjoiNDE0In0sInRyZWVzVXBncmFkZXMiOnsidHJlZXNVcGdyYWRlMSI6eyJib3VnaHQiOnRydWV9LCJ0cmVlc1VwZ3JhZGUyIjp7ImJvdWdodCI6dHJ1ZX0sInRyZWVzVXBncmFkZTMiOnsiYm91Z2h0Ijp0cnVlfSwidHJlZXNVcGdyYWRlNCI6eyJib3VnaHQiOnRydWV9fSwibWV0YWxVcGdyYWRlcyI6eyJtZXRhbFVwZ3JhZGUxIjp7ImJvdWdodCI6dHJ1ZX0sIm1ldGFsVXBncmFkZTIiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlMyI6eyJib3VnaHQiOnRydWV9LCJtZXRhbFVwZ3JhZGU0Ijp7ImJvdWdodCI6dHJ1ZX19LCJwYXBlclVwZ3JhZGVzIjp7InBhcGVyVXBncmFkZTEiOnsiYm91Z2h0Ijp0cnVlfSwicGFwZXJVcGdyYWRlMiI6eyJib3VnaHQiOnRydWV9LCJwYXBlclVwZ3JhZGUzIjp7ImJvdWdodCI6dHJ1ZX0sInBhcGVyVXBncmFkZTQiOnsiYm91Z2h0Ijp0cnVlfX19LCJtYXN0ZXJlZCI6dHJ1ZX0sIm9pbCI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJvaWwiOiIzLjk3NDIwMDQ4NjI5MjA3MWUxOCIsInRvdGFsT2lsIjoiMi4zNzM3ODA5OTU4MzkyNjNlMTkiLCJkZXB0aCI6IjY3MzE0IiwiZHJpbGxQcm9ncmVzcyI6IjEuMjYwNjg3NjM1NzU0NDM5MmUzMSIsImFjdGl2ZUhlYXZ5IjoiNjE5IiwiYnVpbGRIZWF2eSI6eyJhbW91bnQiOiI2MTkifSwiYWN0aXZlSGVhdnkyIjoiMjg4IiwiYnVpbGRIZWF2eTIiOnsiYW1vdW50IjoiMjg4In0sImFjdGl2ZUV4dHJhY3RvciI6IjY2IiwiYnVpbGRFeHRyYWN0b3IiOnsiYW1vdW50IjoiNjYifSwiYWN0aXZlUHVtcCI6IjYyIiwiYnVpbGRQdW1wIjp7ImFtb3VudCI6IjYyIn0sImFjdGl2ZUJ1cm5lciI6IjM5NCIsImJ1aWxkQnVybmVyIjp7ImFtb3VudCI6IjM5NCJ9LCJhY3RpdmVTbWVsdGVyIjoiMjg0IiwiYnVpbGRTbWVsdGVyIjp7ImFtb3VudCI6IjI4NCJ9LCJkZXB0aE1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX0sIjUiOnsiZWFybmVkIjp0cnVlfSwiNiI6eyJlYXJuZWQiOnRydWV9LCI3Ijp7ImVhcm5lZCI6dHJ1ZX19LCJjb2xsYXBzZWREZXB0aE1pbGVzdG9uZXMiOnRydWUsInJvdzFVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzJVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJvaWxNaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX19LCJjb2xsYXBzZWRPaWxNaWxlc3RvbmVzIjp0cnVlLCJyb3czVXBncmFkZXMiOnsiMCI6eyJib3VnaHQiOnRydWV9LCIxIjp7ImJvdWdodCI6dHJ1ZX0sIjIiOnsiYm91Z2h0Ijp0cnVlfSwiMyI6eyJib3VnaHQiOnRydWV9LCI0Ijp7ImJvdWdodCI6dHJ1ZX19LCJtYXN0ZXJ5Ijp7Im9pbCI6IjUwODA2MDY5MS44MzU4MzA2IiwidG90YWxPaWwiOiI1MTE0MTQ2NDEuODM1ODMwNiIsImRlcHRoIjoiMjMwOTMiLCJkcmlsbFByb2dyZXNzIjoiMTM1NTcyNTUyMzE2NC43ODEyIiwiYWN0aXZlSGVhdnkiOiIxMDMiLCJidWlsZEhlYXZ5Ijp7ImFtb3VudCI6IjEwMyJ9LCJhY3RpdmVIZWF2eTIiOiI0MSIsImJ1aWxkSGVhdnkyIjp7ImFtb3VudCI6IjQxIn0sImFjdGl2ZUV4dHJhY3RvciI6IjExIiwiYnVpbGRFeHRyYWN0b3IiOnsiYW1vdW50IjoiMTEifSwiYWN0aXZlUHVtcCI6IjExIiwiYnVpbGRQdW1wIjp7ImFtb3VudCI6IjExIn0sImFjdGl2ZUJ1cm5lciI6IjI1IiwiYnVpbGRCdXJuZXIiOnsiYW1vdW50IjoiMjUifSwiYWN0aXZlU21lbHRlciI6IjEyIiwiYnVpbGRTbWVsdGVyIjp7ImFtb3VudCI6IjEyIn0sImRlcHRoTWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfSwiNSI6eyJlYXJuZWQiOnRydWV9LCI2Ijp7ImVhcm5lZCI6dHJ1ZX0sIjciOnsiZWFybmVkIjp0cnVlfX0sIm9pbE1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfX0sInJvdzFVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzJVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzNVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6ZmFsc2V9LCIxIjp7ImJvdWdodCI6ZmFsc2V9LCIyIjp7ImJvdWdodCI6ZmFsc2V9LCIzIjp7ImJvdWdodCI6ZmFsc2V9LCI0Ijp7ImJvdWdodCI6ZmFsc2V9fX0sIm1hc3RlcmVkIjp0cnVlfSwicGxhc3RpYyI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJwbGFzdGljIjoiMTA1Nzg3OTA1NzAwMTUxMy4xIiwidG90YWxQbGFzdGljIjoiMzU3NjUwNDM1MjQxNDUwOSIsImJ1aWxkUmVmaW5lcnkiOnsiYW1vdW50IjoiMzE5In0sImFjdGl2ZVJlZmluZXJ5IjoiMzE5IiwidXBncmFkZXMiOnsicGFwZXJUb29scyI6eyJib3VnaHQiOnRydWV9LCJib3hUb29scyI6eyJib3VnaHQiOnRydWV9LCJjbG90aFRvb2xzIjp7ImJvdWdodCI6dHJ1ZX19LCJlbGZVcGdyYWRlcyI6eyJwYXBlckVsZiI6eyJib3VnaHQiOnRydWV9LCJib3hFbGYiOnsiYm91Z2h0Ijp0cnVlfSwiY2xvdGhFbGYiOnsiYm91Z2h0Ijp0cnVlfX0sImJ1eWFibGVzIjp7InBhc3NpdmVQYXBlciI6eyJhbW91bnQiOiIzNDYwOSJ9LCJwYXNzaXZlQm94ZXMiOnsiYW1vdW50IjoiMTQxIn0sImNsb3RoR2FpbnMiOnsiYW1vdW50IjoiMTQxIn19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwibWFzdGVyeSI6eyJwbGFzdGljIjoiMTY0MDA3MC40NTIyMzI5MTIiLCJ0b3RhbFBsYXN0aWMiOiIxNjYxOTEwLjQ1MjIzMjkxMiIsImFjdGl2ZVJlZmluZXJ5IjoiNDYiLCJidWlsZFJlZmluZXJ5Ijp7ImFtb3VudCI6IjQ2In0sInVwZ3JhZGVzIjp7InBhcGVyVG9vbHMiOnsiYm91Z2h0Ijp0cnVlfSwiYm94VG9vbHMiOnsiYm91Z2h0Ijp0cnVlfSwiY2xvdGhUb29scyI6eyJib3VnaHQiOnRydWV9fSwiZWxmVXBncmFkZXMiOnsicGFwZXJFbGYiOnsiYm91Z2h0Ijp0cnVlfSwiYm94RWxmIjp7ImJvdWdodCI6dHJ1ZX0sImNsb3RoRWxmIjp7ImJvdWdodCI6dHJ1ZX19LCJidXlhYmxlcyI6eyJwYXNzaXZlUGFwZXIiOnsiYW1vdW50IjoiNjYxIn0sInBhc3NpdmVCb3hlcyI6eyJhbW91bnQiOiI2NjEifSwiY2xvdGhHYWlucyI6eyJhbW91bnQiOiI2NjEifX19LCJtYXN0ZXJlZCI6dHJ1ZX0sImR5ZXMiOnsibWluaW1pemVkIjpmYWxzZSwiZHllcyI6eyJyZWQiOnsiYW1vdW50IjoiNzYyNzk4MzI3NTcuODk5MTkiLCJidXlhYmxlIjp7ImFtb3VudCI6IjQ0NyJ9fSwieWVsbG93Ijp7ImFtb3VudCI6IjE4ODkyMjQ4NzM4Ni43MDk3NSIsImJ1eWFibGUiOnsiYW1vdW50IjoiNDI4In19LCJibHVlIjp7ImFtb3VudCI6IjI1NzI2MjcyNTg4LjYxNjM5IiwiYnV5YWJsZSI6eyJhbW91bnQiOiI0MTAifX0sIm9yYW5nZSI6eyJhbW91bnQiOiI0MTU3NiIsImJ1eWFibGUiOnsiYW1vdW50IjoiNTI5In19LCJncmVlbiI6eyJhbW91bnQiOiIzMjE5NiIsImJ1eWFibGUiOnsiYW1vdW50IjoiNDU5In19LCJwdXJwbGUiOnsiYW1vdW50IjoiMzAzMjAiLCJidXlhYmxlIjp7ImFtb3VudCI6IjQ0NyJ9fX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJ1cGdyYWRlcyI6eyJibHVlRHllVXBnIjp7ImJvdWdodCI6dHJ1ZX0sInJlZER5ZVVwZyI6eyJib3VnaHQiOnRydWV9LCJ5ZWxsb3dEeWVVcGciOnsiYm91Z2h0Ijp0cnVlfSwieWVsbG93RHllVXBnMiI6eyJib3VnaHQiOnRydWV9LCJyZWREeWVVcGcyIjp7ImJvdWdodCI6dHJ1ZX0sImJsdWVEeWVVcGcyIjp7ImJvdWdodCI6dHJ1ZX0sImNvYWxVcGciOnsiYm91Z2h0Ijp0cnVlfX0sIm1hc3RlcnkiOnsiZHllcyI6eyJyZWQiOnsiYW1vdW50IjowLCJidXlhYmxlIjp7ImFtb3VudCI6IjE1In19LCJncmVlbiI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiNSJ9fSwiYmx1ZSI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiMTQifX0sInllbGxvdyI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiMTIifX0sInB1cnBsZSI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiNCJ9fSwib3JhbmdlIjp7ImFtb3VudCI6MCwiYnV5YWJsZSI6eyJhbW91bnQiOiI0In19fSwidXBncmFkZXMiOnsiYmx1ZUR5ZVVwZyI6eyJib3VnaHQiOnRydWV9LCJyZWREeWVVcGciOnsiYm91Z2h0Ijp0cnVlfSwieWVsbG93RHllVXBnIjp7ImJvdWdodCI6dHJ1ZX0sInllbGxvd0R5ZVVwZzIiOnsiYm91Z2h0Ijp0cnVlfSwicmVkRHllVXBnMiI6eyJib3VnaHQiOnRydWV9LCJibHVlRHllVXBnMiI6eyJib3VnaHQiOnRydWV9LCJjb2FsVXBnIjp7ImJvdWdodCI6dHJ1ZX19fSwibWFzdGVyZWQiOnRydWV9LCJtYW5hZ2VtZW50Ijp7Im1pbmltaXplZCI6ZmFsc2UsImVsZlRyYWluaW5nIjp7ImN1dHRlckVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIzMTI3NDY4LjIyOTc1OTUwMTgiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sInBsYW50ZXJFbGZUcmFpbmluZyI6eyJzdGF0ZSI6dHJ1ZSwiZXhwIjoiNjI0ODQ1Ni4yMTU2NjA1NCIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiZXhwYW5kZXJzRWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiI5Mzc2NDUxLjQzODk2MTQ0MyIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiaGVhdGVkQ3V0dGVyRWxmVHJhaW5pbmciOnsic3RhdGUiOnRydWUsImV4cCI6IjEyNDk2MzI3LjM5NTk2NDYxNSIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiaGVhdGVkUGxhbnRlckVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIxNTYyMzk4My4yMDc5NDI2MyIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiZmVydGlsaXplckVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIxODc4MDg4Mi45MTMyNTQxMiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwic21hbGxmaXJlRWxmVHJhaW5pbmciOnsic3RhdGUiOnRydWUsImV4cCI6IjIxOTA3NDkzLjM5MDE1MzU0NiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiYm9uZmlyZUVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIyNTAwNjQzNi4wMzM4ODIzMjciLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sImZpcmVFbGZUcmFpbmluZyI6eyIyIjp7InN0YXRlIjp0cnVlLCJleHAiOjB9fSwia2lsbkVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIyODE5MzUwNy43OTA3MTA5ODIiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sInBhcGVyRWxmVHJhaW5pbmciOnsic3RhdGUiOnRydWUsImV4cCI6IjEwNDMwOTA0LjQ2MzY2NDMwNiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiYm94RWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiIxMTQ3MDIyNC41MDQ5ODIzNDUiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sImNsb3RoRWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiIzNzQ4OTM1NS4wNDcwMTA3NSIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiY29hbERyaWxsRWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiI0MDYyMzY4NS4wNDA5MTI3NCIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwibWV0YWxFbGZUcmFpbmluZyI6eyJzdGF0ZSI6ZmFsc2UsImV4cCI6IjUwMDQ2MDI3Ljk5OTYwOTU4IiwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfX19LCJvaWxFbGZUcmFpbmluZyI6eyJzdGF0ZSI6ZmFsc2UsImV4cCI6IjQ2ODYwMzcxLjU0ODQxMTg3NiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiaGVhdnlEcmlsbEVsZlRyYWluaW5nIjp7InN0YXRlIjpmYWxzZSwiZXhwIjoiNDM3Mzk3MzUuNjE1MTU0MzkiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sImR5ZUVsZlRyYWluaW5nIjp7InN0YXRlIjpmYWxzZSwiZXhwIjoiNTMxMjc0MDAuNjQ3NjM2MTUiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sInBsYXN0aWNFbGZUcmFpbmluZyI6eyJzdGF0ZSI6dHJ1ZSwiZXhwIjoiMTY0OTgzNzQuMDEyMTE4ODAzIiwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjpmYWxzZX19fX0sImN1cnJlbnRTaG93biI6IkNhcm9sIiwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sInRlYWNoaW5nIjp7ImJvdWdodCI6dHJ1ZX0sInNjaG9vbHMiOnsiYW1vdW50IjoiNSJ9LCJjbGFzc3Jvb21zIjp7ImFtb3VudCI6IjEwNDYifSwiY2xhc3Nyb29tVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJmb2N1c011bHRpcGxpZXIiOiIxLjAwNjE1NzgzMjc4NzQ5ODciLCJ1cGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9fSwiZm9jdXNUYXJnZXRzIjp7fSwiZm9jdXNDb29sZG93biI6MCwiZm9jdXNUaW1lIjowLCJhZHZhbmNlZFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwidXBncmFkZXMyIjp7IjAiOnsiYm91Z2h0Ijp0cnVlfSwiMSI6eyJib3VnaHQiOnRydWV9LCIyIjp7ImJvdWdodCI6dHJ1ZX19LCJmb2N1c011bHRpIjoiMTguMzYzMTUyMDU5Mzg2MTciLCJtYXN0ZXJ5Ijp7ImVsZlRyYWluaW5nIjp7ImJvbmZpcmVFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJib3hFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJjbG90aEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImNvYWxEcmlsbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImN1dHRlckVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImV4cGFuZGVyc0VsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImZlcnRpbGl6ZXJFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJoZWF0ZWRDdXR0ZXJFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJoZWF0ZWRQbGFudGVyRWxmVHJhaW5pbmciOnsiZXhwIjowLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjpmYWxzZX0sIjEiOnsiZWFybmVkIjpmYWxzZX0sIjIiOnsiZWFybmVkIjpmYWxzZX0sIjMiOnsiZWFybmVkIjpmYWxzZX0sIjQiOnsiZWFybmVkIjpmYWxzZX19fSwiaGVhdnlEcmlsbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImtpbG5FbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJtZXRhbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sIm9pbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sInBhcGVyRWxmVHJhaW5pbmciOnsiZXhwIjowLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjpmYWxzZX0sIjEiOnsiZWFybmVkIjpmYWxzZX0sIjIiOnsiZWFybmVkIjpmYWxzZX0sIjMiOnsiZWFybmVkIjpmYWxzZX0sIjQiOnsiZWFybmVkIjpmYWxzZX19fSwicGxhbnRlckVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sInNtYWxsZmlyZUVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImR5ZUVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sInBsYXN0aWNFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19fSwidGVhY2hpbmciOnsiYm91Z2h0IjpmYWxzZX0sInNjaG9vbHMiOnsiYW1vdW50IjowfSwiY2xhc3Nyb29tcyI6eyJhbW91bnQiOjB9LCJjbGFzc3Jvb21VcGdyYWRlIjp7ImJvdWdodCI6ZmFsc2V9LCJhZHZhbmNlZFVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX0sInVwZ3JhZGVzIjp7IjAiOnsiYm91Z2h0IjpmYWxzZX0sIjEiOnsiYm91Z2h0IjpmYWxzZX0sIjIiOnsiYm91Z2h0IjpmYWxzZX19LCJ1cGdyYWRlczIiOnsiMCI6eyJib3VnaHQiOmZhbHNlfSwiMSI6eyJib3VnaHQiOmZhbHNlfSwiMiI6eyJib3VnaHQiOmZhbHNlfX0sImZvY3VzTXVsdGkiOiIxLjAxMjY5ODQ3NTQyMDExODciLCJmb2N1c1RhcmdldHMiOnt9LCJmb2N1c0Nvb2xkb3duIjowLCJmb2N1c1RpbWUiOjB9fSwid3JhcHBpbmdQYXBlciI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJ3cmFwcGluZ1BhcGVyIjp7ImNocmlzdG1hcyI6eyJidXlhYmxlIjp7ImFtb3VudCI6IjU4In19LCJyYWluYm93Ijp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNDEifX0sImphenp5Ijp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNzcifX0sInN1bnNoaW5lIjp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNTAifX0sIm9jZWFuIjp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNDUifX0sImJlYWNoIjp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNTEifX19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwibWlsZXN0b25lcyI6eyJwcmltYXJ5Qm9vc3QiOnsiZWFybmVkIjpmYWxzZX0sInNlY29uZGFyeUJvb3N0Ijp7ImVhcm5lZCI6ZmFsc2V9LCJidXlNYXhQcmltYXJ5Ijp7ImVhcm5lZCI6ZmFsc2V9LCJzZWNvbmRhcnlOb1Jlc2V0Ijp7ImVhcm5lZCI6ZmFsc2V9LCJidXlNYXhTZWNvbmRhcnkiOnsiZWFybmVkIjpmYWxzZX0sInVubG9ja0R5ZUVsZiI6eyJlYXJuZWQiOmZhbHNlfX0sImNvbGxhcHNlTWlsZXN0b25lcyI6dHJ1ZSwidW5sb2NrRHllRWxmTWlsZXN0b25lIjp7ImVhcm5lZCI6dHJ1ZX19LCJsZXR0ZXJzIjp7Im1pbmltaXplZCI6ZmFsc2UsImxldHRlcnMiOiIxLjMwOTQ4NTQxMzA1MjYzMjZlNTQiLCJ0b3RhbExldHRlcnMiOiIxLjMwOTQ4NTQxMzA1MjYzMjZlNTQiLCJwcm9jZXNzaW5nUHJvZ3Jlc3MiOiI2LjI0MTk2OTM1MDIwMzkxN2UtMjgiLCJidXlhYmxlcyI6eyJtZXRhbEJ1eWFibGUiOnsiYW1vdW50IjoiMTIifSwicGxhc3RpY0J1eWFibGUiOnsiYW1vdW50IjoiMjMifSwicGFwZXJCdXlhYmxlIjp7ImFtb3VudCI6IjQzIn19LCJtaWxlc3RvbmVzIjp7ImF1dG9TbWVsdGluZ01pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJtaW5pbmdNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfSwic3luZXJneU1pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJpbmR1c3RyaWFsQ3J1Y2libGVNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJjb2xsYXBzZU1pbGVzdG9uZXMiOnRydWUsIm1hc3RlcnkiOnsibGV0dGVycyI6IjEyNTU4MDA1LjU3MTUxMDg1IiwidG90YWxMZXR0ZXJzIjoiMTI1NTgwMDUuNTcxNTEwODUiLCJidXlhYmxlcyI6eyJtZXRhbEJ1eWFibGUiOnsiYW1vdW50IjowfSwicGxhc3RpY0J1eWFibGUiOnsiYW1vdW50IjowfSwicGFwZXJCdXlhYmxlIjp7ImFtb3VudCI6MH19LCJtaWxlc3RvbmVzIjp7ImF1dG9TbWVsdGluZ01pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJtaW5pbmdNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfSwic3luZXJneU1pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJpbmR1c3RyaWFsQ3J1Y2libGVNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfX19LCJtYXN0ZXJlZCI6dHJ1ZX0sInJpYmJvbiI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJyaWJib24iOiIxNiIsIm1pbGVzdG9uZXMiOnsic2Vjb25kYXJ5RHllRWxmIjp7ImVhcm5lZCI6dHJ1ZX0sImR5ZUJvb2siOnsiZWFybmVkIjp0cnVlfX0sInJpYmJvblByb2dyZXNzIjoxMCwiY29sbGFwc2VNaWxlc3RvbmVzIjp0cnVlLCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fX19LCJhdXRvUGF1c2UiOnRydWUsInVzaW5nTG9nIjpmYWxzZX0= From 6786259609958d8d0638e6c5f6600052f6300c8c Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Tue, 20 Dec 2022 16:43:59 -0800 Subject: [PATCH 09/18] Create Day 17 Complete.txt --- saves/Day 17 Complete.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 saves/Day 17 Complete.txt diff --git a/saves/Day 17 Complete.txt b/saves/Day 17 Complete.txt new file mode 100644 index 0000000..76fc748 --- /dev/null +++ b/saves/Day 17 Complete.txt @@ -0,0 +1 @@ +eyJpZCI6ImFkdmVudC1pbmNyZW1lbnRhbC0xIiwiZGV2U3BlZWQiOjAsIm5hbWUiOiJEZWZhdWx0IFNhdmUiLCJ0YWJzIjpbIm1haW4iLCJ3cmFwcGluZ1BhcGVyIiwiZHllcyIsInRveXMiLCJ0cmVlcyIsIndvcmtzaG9wIiwicGxhc3RpYyJdLCJ0aW1lIjoxNjcxNTgyMTY4Mzk2LCJhdXRvc2F2ZSI6dHJ1ZSwib2ZmbGluZVByb2QiOmZhbHNlLCJvZmZsaW5lVGltZSI6bnVsbCwidGltZVBsYXllZCI6ODgzOTQuMjA1NTE5MzQ0NzMsImtlZXBHb2luZyI6ZmFsc2UsIm1vZElEIjoiYWR2ZW50LWluY3JlbWVudGFsIiwibW9kVmVyc2lvbiI6IjAuNSIsImxheWVycyI6eyJtYWluIjp7Im1pbmltaXplZCI6dHJ1ZSwiZGF5cyI6eyIwIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjEiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMiI6eyJvcGVuZWQiOnRydWUsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCIzIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjQiOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiNSI6eyJvcGVuZWQiOnRydWUsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCI2Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjciOnsib3BlbmVkIjp0cnVlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiOCI6eyJvcGVuZWQiOnRydWUsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCI5Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjEwIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjExIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjEyIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjEzIjp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjE0Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjE1Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjE2Ijp7Im9wZW5lZCI6dHJ1ZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjE3Ijp7Im9wZW5lZCI6ZmFsc2UsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCIxOCI6eyJvcGVuZWQiOmZhbHNlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMTkiOnsib3BlbmVkIjpmYWxzZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjIwIjp7Im9wZW5lZCI6ZmFsc2UsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9LCIyMSI6eyJvcGVuZWQiOmZhbHNlLCJyZWNlbnRseVVwZGF0ZWQiOmZhbHNlfSwiMjIiOnsib3BlbmVkIjpmYWxzZSwicmVjZW50bHlVcGRhdGVkIjpmYWxzZX0sIjIzIjp7Im9wZW5lZCI6ZmFsc2UsInJlY2VudGx5VXBkYXRlZCI6ZmFsc2V9fSwiZGF5IjoxOCwiaXNNYXN0ZXJ5IjpmYWxzZX0sInRyZWVzIjp7Im1pbmltaXplZCI6ZmFsc2UsImxvZ3MiOiI3LjAyNTE3NTYwOTUyMDg3NTVlNzEiLCJ0b3RhbExvZ3MiOiIxLjI2NTg3ODgxODYxMjgzMTZlNzMiLCJ0cmVlcyI6IjEwIiwic2FwbGluZ3MiOiIzLjA5NDk0ODY3Mzg4MTc2NDZlMjgiLCJyb3cxVXBncmFkZXMiOnsiMCI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sIjEiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9LCIyIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfSwiMyI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sIjQiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9fSwicm93MlVwZ3JhZGVzIjp7IjAiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9LCIxIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfSwiMiI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImJvdWdodCI6dHJ1ZX0sIjMiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJib3VnaHQiOnRydWV9LCI0Ijp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfX0sInJvdzFCdXlhYmxlcyI6eyIwIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjoiMzU2OTg0NyJ9LCIxIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjoiMzY3NDA4OCJ9LCIyIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjoiNzcxNTIyOSJ9fSwibWFudWFsQ3V0UHJvZ3Jlc3MiOiIwLjAwMDAwMTkwNzM0ODYzMjgxMjQ5OTQiLCJtYW51YWxQbGFudFByb2dyZXNzIjoiMC4wMDAwMDE5MDczNDg2MzI4MTI0OTk0IiwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sImNyZWF0ZWRTYXBsaW5ncyI6IjMuMzEzNjc3MzM1NDgzNzE5N2UyOCIsIm1hc3RlcnkiOnsibG9ncyI6IjQuODcyMTUyNjU1NTIxNDA4ZTIzIiwidG90YWxMb2dzIjoiNC45MjgzMzg4NDA0MDEzMmUyMyIsInNhcGxpbmdzIjoiNjUzNzUwNTI3NDgzNjguODMiLCJyb3cxVXBncmFkZXMiOnsiMCI6eyJib3VnaHQiOnRydWV9LCIxIjp7ImJvdWdodCI6dHJ1ZX0sIjIiOnsiYm91Z2h0Ijp0cnVlfSwiMyI6eyJib3VnaHQiOnRydWV9LCI0Ijp7ImJvdWdodCI6dHJ1ZX19LCJyb3cyVXBncmFkZXMiOnsiMCI6eyJib3VnaHQiOnRydWV9LCIxIjp7ImJvdWdodCI6dHJ1ZX0sIjIiOnsiYm91Z2h0Ijp0cnVlfSwiMyI6eyJib3VnaHQiOnRydWV9LCI0Ijp7ImJvdWdodCI6dHJ1ZX19LCJyb3cxQnV5YWJsZXMiOnsiMCI6eyJhbW91bnQiOiIxMTMyOTUifSwiMSI6eyJhbW91bnQiOiIxMTMyOTUifSwiMiI6eyJhbW91bnQiOiIzMzU4MjcifX0sImNyZWF0ZWRTYXBsaW5ncyI6IjY1Mzc1ODM1MDc3MjAxLjUxNiJ9LCJtYXN0ZXJlZCI6dHJ1ZX0sIndvcmtzaG9wIjp7Im1pbmltaXplZCI6ZmFsc2UsImZvdW5kYXRpb25Qcm9ncmVzcyI6IjEyMDAiLCJmb3VuZGF0aW9uQ29udmVyc2lvbiI6eyJiYXNlUmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJnYWluUmVzb3VyY2UiOiIxMDAifSwibWlsZXN0b25lcyI6eyJsb2dHYWluTWlsZXN0b25lMSI6eyJlYXJuZWQiOnRydWV9LCJhdXRvQ3V0TWlsZXN0b25lMSI6eyJlYXJuZWQiOnRydWV9LCJhdXRvUGxhbnRNaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9DdXRNaWxlc3RvbmUyIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9QbGFudE1pbGVzdG9uZTIiOnsiZWFybmVkIjp0cnVlfSwibG9nR2Fpbk1pbGVzdG9uZTIiOnsiZWFybmVkIjp0cnVlfSwibW9yZVBsYW50c01pbGVzdG9uZTEiOnsiZWFybmVkIjp0cnVlfSwibG9nR2Fpbk1pbGVzdG9uZTMiOnsiZWFybmVkIjp0cnVlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImV4dHJhRXhwYW5zaW9uTWlsZXN0b25lMiI6eyJlYXJuZWQiOnRydWV9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTMiOnsiZWFybmVkIjp0cnVlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmU0Ijp7ImVhcm5lZCI6dHJ1ZX0sImV4dHJhRXhwYW5zaW9uTWlsZXN0b25lNSI6eyJlYXJuZWQiOnRydWV9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTYiOnsiZWFybmVkIjp0cnVlfX0sImNvbGxhcHNlTWlsZXN0b25lcyI6dHJ1ZSwibWFzdGVyeSI6eyJmb3VuZGF0aW9uUHJvZ3Jlc3MiOiIxMDAiLCJtaWxlc3RvbmVzIjp7ImxvZ0dhaW5NaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9DdXRNaWxlc3RvbmUxIjp7ImVhcm5lZCI6dHJ1ZX0sImF1dG9QbGFudE1pbGVzdG9uZTEiOnsiZWFybmVkIjp0cnVlfSwiYXV0b0N1dE1pbGVzdG9uZTIiOnsiZWFybmVkIjp0cnVlfSwiYXV0b1BsYW50TWlsZXN0b25lMiI6eyJlYXJuZWQiOnRydWV9LCJsb2dHYWluTWlsZXN0b25lMiI6eyJlYXJuZWQiOnRydWV9LCJtb3JlUGxhbnRzTWlsZXN0b25lMSI6eyJlYXJuZWQiOnRydWV9LCJsb2dHYWluTWlsZXN0b25lMyI6eyJlYXJuZWQiOnRydWV9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTEiOnsiZWFybmVkIjpmYWxzZX0sImV4dHJhRXhwYW5zaW9uTWlsZXN0b25lMiI6eyJlYXJuZWQiOmZhbHNlfSwiZXh0cmFFeHBhbnNpb25NaWxlc3RvbmUzIjp7ImVhcm5lZCI6ZmFsc2V9LCJleHRyYUV4cGFuc2lvbk1pbGVzdG9uZTQiOnsiZWFybmVkIjpmYWxzZX0sImV4dHJhRXhwYW5zaW9uTWlsZXN0b25lNSI6eyJlYXJuZWQiOmZhbHNlfX19LCJtYXN0ZXJlZCI6dHJ1ZX0sImNvYWwiOnsibWluaW1pemVkIjpmYWxzZSwiY29hbCI6IjEuOTkzNzU2MDE5ODc1NTM2NGUxMjYiLCJ0b3RhbENvYWwiOiIxLjk5Mzc1NjAyMDY5MzMwODVlMTI2IiwiYXNoIjoiMy42OTk2OTI4Mzk2NjAyODJlOTkiLCJhY3RpdmVGaXJlcyI6IjAiLCJidWlsZEZpcmUiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiIwIn0sImFjdGl2ZUJvbmZpcmVzIjoiMi42NDAxNDc5ODUwNDQzMjc3ZTIxIiwiYnVpbGRCb25maXJlIjp7InJlc291cmNlIjowLCJhbW91bnQiOiIyLjY0MDE0Nzk4NTA0NDMyNzdlMjEifSwiYWN0aXZlS2lsbnMiOiI1ODAyIiwiYnVpbGRLaWxuIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjoiNTgwMiJ9LCJ3YXJtZXJDdXR0ZXJzIjp7InJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWV9LCJ3YXJtZXJQbGFudGVycyI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlfSwiYmFzaWNGZXJ0aWxpemVyIjp7InJlc291cmNlIjoiMTQ1Njg4MjYiLCJib3VnaHQiOnRydWV9LCJ1bmxvY2tCb25maXJlIjp7InJlc291cmNlIjowLCJib3VnaHQiOnRydWV9LCJkZWRpY2F0ZWRDdXR0ZXJzIjp7InJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWV9LCJkZWRpY2F0ZWRQbGFudGVycyI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlfSwiYmV0dGVyRmVydGlsaXplciI6eyJib3VnaHQiOnRydWV9LCJ1bmxvY2tLaWxuIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYm91Z2h0Ijp0cnVlfSwiaGVhdGVkQ3V0dGVycyI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYW1vdW50IjoiMTQ4NTAxNjkwNDYyIn0sImhlYXRlZFBsYW50ZXJzIjp7InJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJhbW91bnQiOiIxNDg1MDE2OTA0NjIifSwibW9yZUZlcnRpbGl6ZXIiOnsicmVzb3VyY2UiOiIxNDU2ODgyNiIsImFtb3VudCI6IjY0OTQwMjcxODQxMzYifSwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sImFjdGl2ZURyaWxscyI6IjMxMjIiLCJidWlsZERyaWxsIjp7ImFtb3VudCI6IjMxMjIifSwiZWZmaWNpZW50U21lbHRoZXIiOnsicmVzb3VyY2UiOiIxLjMzNjQ3Nzc5MTMyODI1MmUxNyIsImJvdWdodCI6dHJ1ZX0sImFyc29uaXN0QXNzaXN0YW5jZSI6eyJib3VnaHQiOnRydWV9LCJyZWZpbmVkQ29hbCI6eyJib3VnaHQiOnRydWV9LCJjb2xvcmVkRmlyZSI6eyJib3VnaHQiOnRydWV9LCJtYXN0ZXJ5Ijp7ImNvYWwiOiI5LjA2MjgxMTc2NzIwNzU0NWUzMyIsInRvdGFsQ29hbCI6IjkuMDY4OTIyODc4MzE4NTM1ZTMzIiwiYXNoIjoiMi42NzUyNDM0Nzg3MzIxODhlMTciLCJhY3RpdmVGaXJlcyI6IjEwNjEuODg1Mzg1NDc1NTI5OCIsImJ1aWxkRmlyZSI6eyJhbW91bnQiOiIxMDYxLjg4NTM4NTQ3NTUyOTgifSwiYWN0aXZlQm9uZmlyZXMiOiIyMDA1MDMiLCJidWlsZEJvbmZpcmUiOnsiYW1vdW50IjoiMjAwNTAzIn0sImFjdGl2ZUtpbG5zIjoiNjcxIiwiYnVpbGRLaWxuIjp7ImFtb3VudCI6IjY3MSJ9LCJhY3RpdmVEcmlsbHMiOiIxNjUiLCJidWlsZERyaWxsIjp7ImFtb3VudCI6IjE2NSJ9LCJ3YXJtZXJDdXR0ZXJzIjp7ImJvdWdodCI6dHJ1ZX0sIndhcm1lclBsYW50ZXJzIjp7ImJvdWdodCI6dHJ1ZX0sImJhc2ljRmVydGlsaXplciI6eyJib3VnaHQiOnRydWV9LCJ1bmxvY2tCb25maXJlIjp7ImJvdWdodCI6dHJ1ZX0sImRlZGljYXRlZEN1dHRlcnMiOnsiYm91Z2h0Ijp0cnVlfSwiZGVkaWNhdGVkUGxhbnRlcnMiOnsiYm91Z2h0Ijp0cnVlfSwiYmV0dGVyRmVydGlsaXplciI6eyJib3VnaHQiOnRydWV9LCJ1bmxvY2tLaWxuIjp7ImJvdWdodCI6dHJ1ZX0sImVmZmljaWVudFNtZWx0aGVyIjp7ImJvdWdodCI6dHJ1ZX0sImFyc29uaXN0QXNzaXN0YW5jZSI6eyJib3VnaHQiOmZhbHNlfSwicmVmaW5lZENvYWwiOnsiYm91Z2h0IjpmYWxzZX0sImNvbG9yZWRGaXJlIjp7ImJvdWdodCI6ZmFsc2V9LCJoZWF0ZWRDdXR0ZXJzIjp7ImFtb3VudCI6Ijk3OTgifSwiaGVhdGVkUGxhbnRlcnMiOnsiYW1vdW50IjoiOTc5OCJ9LCJtb3JlRmVydGlsaXplciI6eyJhbW91bnQiOiIyNTM1In19LCJtYXN0ZXJlZCI6dHJ1ZX0sImVsdmVzIjp7Im1pbmltaXplZCI6ZmFsc2UsImVsdmVzIjp7ImN1dHRlcnNFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMTI4OTEyMTYzMzQ2MDE3NzQiLCJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlLCJidXlhYmxlIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjoiMzE5OCJ9LCJhbW91bnRPZlRpbWVzRG9uZSI6MC4xMDAwMDAwMDAyNTc4OTI5MX0sInBsYW50ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA2MTk0ODYxODY4NTc0NjI1IiwicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZSwiYnV5YWJsZSI6eyJyZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImFtb3VudCI6IjMxOTgifSwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuOTMyMDAwMDAwMjU3NDMxOH0sImV4cGFuZGVyc0VsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAwMjY1NDAxMzc4MTEwNjY2MiIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImJ1eWFibGUiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiI3Mzc5In0sImFtb3VudE9mVGltZXNEb25lIjowLjkyMDAwMDAwMDI1NzQ4ODJ9LCJoZWF0ZWRDdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA1OTk4ODYwNjU1NjUyODMyIiwicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZSwiYnV5YWJsZSI6eyJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYW1vdW50IjoiMjcwIn0sImFtb3VudE9mVGltZXNEb25lIjowLjQ5NjAwMDAwMDI1NjQ4NjgzfSwiaGVhdGVkUGxhbnRlcnNFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMDExNTU0MTQ0NjU5NjQ3ODgiLCJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlLCJidXlhYmxlIjp7InJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJhbW91bnQiOiIyNzAifSwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNDU2MDAwMDAwMjU0MDIyMX0sImZlcnRpbGl6ZXJFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMDYzNDg2ODkxOTgzNjg3MDEiLCJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlLCJidXlhYmxlIjp7InJlc291cmNlIjoiMTQ1Njg4MjYiLCJhbW91bnQiOiIxMzkifSwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNjU2MDAwMDAwMjUzMjcxOH0sInNtYWxsRmlyZUVsZiI6eyJidXlhYmxlIjp7InJlc291cmNlIjoiMTAyODQzNjA2NjEwOC42NTk0IiwiYW1vdW50IjowfSwidG9nZ2xlIjp0cnVlLCJidXlQcm9ncmVzcyI6IjAuMDAwNzkxMDM5MTg3MzUzODk2NiIsInJlc291cmNlIjoiNzc3NDc4OTk3NjUuNDgzNzgiLCJib3VnaHQiOnRydWUsImFtb3VudE9mVGltZXNEb25lIjowLjk0MDAwMDAwMDI1MjY5NTF9LCJib25maXJlRWxmIjp7ImJ1eWFibGUiOnsicmVzb3VyY2UiOjAsImFtb3VudCI6MH0sInRvZ2dsZSI6dHJ1ZSwiYnV5UHJvZ3Jlc3MiOiIwLjAwMDU5MzI0Nzg2NTA4ODQyMjYiLCJyZXNvdXJjZSI6Ijc3NzQ3ODk5NzY1LjQ4Mzc4IiwiYm91Z2h0Ijp0cnVlLCJhbW91bnRPZlRpbWVzRG9uZSI6MC40NjQwMDAwMDAyNTQxNzR9LCJraWxuRWxmIjp7ImJ1eWFibGUiOnsicmVzb3VyY2UiOiIxMDI4NDM2MDY2MTA4LjY1OTQiLCJhbW91bnQiOiIxMDIifSwidG9nZ2xlIjp0cnVlLCJidXlQcm9ncmVzcyI6IjAuMDAwNTg4MTcxNDcxMTA3NjkzIiwicmVzb3VyY2UiOiI3Nzc0Nzg5OTc2NS40ODM3OCIsImJvdWdodCI6dHJ1ZSwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMjQ0MDAwMDAwMjUyNTU1MDh9LCJwYXBlckVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDExMjQwMjU5NzQwNTIwNTE1IiwiYm91Z2h0Ijp0cnVlLCJhbW91bnRPZlRpbWVzRG9uZSI6MC44NDQwMDAwMDAwMTk5NDE3fSwiYm94RWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDkwNjYzNDY2OTY5MzU5MjIiLCJib3VnaHQiOnRydWUsImFtb3VudE9mVGltZXNEb25lIjowLjc2ODAwMDAwMDAxNDQ3NTN9LCJjbG90aEVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAwODUwNjU4MTczNzE4NzM4IiwiYm91Z2h0Ijp0cnVlLCJhbW91bnRPZlRpbWVzRG9uZSI6MC45MDAwMDAwMDAyODY0NjgxfSwibWluaW5nRHJpbGxFbGYiOnsidG9nZ2xlIjpmYWxzZSwiYnV5UHJvZ3Jlc3MiOjAsImFtb3VudE9mVGltZXNEb25lIjowLCJib3VnaHQiOmZhbHNlfSwiaGVhdnlEcmlsbEVsZiI6eyJ0b2dnbGUiOnRydWUsImJ1eVByb2dyZXNzIjoiMC4wMDEwNjY3NjQ4MTA0NTExMjc2IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNzA0MDAwMDAwMTA4MDYzNSwiYm91Z2h0Ijp0cnVlfSwib2lsRWxmIjp7InRvZ2dsZSI6dHJ1ZSwiYnV5UHJvZ3Jlc3MiOiIwLjAwMTQwOTMxNTE2MTY5Mzk5MjgiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC45NjgwMDAwMDAxMDMyOTg3LCJib3VnaHQiOnRydWV9LCJtZXRhbEVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAxMzU5Mzg5MjMzNTA3NDU5IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuOTU2MDAwMDAwMTAyOTAwMywiYm91Z2h0Ijp0cnVlfSwiY29hbERyaWxsRWxmIjp7InRvZ2dsZSI6dHJ1ZSwiYnV5UHJvZ3Jlc3MiOiIwLjAwMTA2NzAyMDA4OTEyMjIxODQiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC42MDQwMDAwMDAxMjA0MzI2LCJib3VnaHQiOnRydWV9LCJkeWVFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMDIxNTYxODQ3OTE4NTIzMzkiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC43MzIwMDAwMDAwNTcxODM4LCJib3VnaHQiOnRydWV9LCJwbGFzdGljRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDAzMTk0MTEzNTA3MTExODc4NyIsImFtb3VudE9mVGltZXNEb25lIjowLjI2ODAwMDAwMDA0ODk0Mjg3LCJib3VnaHQiOnRydWV9fSwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfSwiNSI6eyJlYXJuZWQiOnRydWV9LCI2Ijp7ImVhcm5lZCI6dHJ1ZX0sIjciOnsiZWFybmVkIjp0cnVlfSwiOCI6eyJlYXJuZWQiOnRydWV9LCI5Ijp7ImVhcm5lZCI6dHJ1ZX0sIjEwIjp7ImVhcm5lZCI6dHJ1ZX0sIjExIjp7ImVhcm5lZCI6dHJ1ZX19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwiY29sbGFwc2VNaWxlc3RvbmVzIjpmYWxzZSwibWFzdGVyeSI6eyJlbHZlcyI6eyJjdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA0MTMxNjU0NDIxNDE3MzMiLCJhbW91bnRPZlRpbWVzRG9uZSI6MS4wNDU5MTg5MDcwMzg4Njc1ZS0xMSwiYm91Z2h0Ijp0cnVlfSwicGxhbnRlcnNFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwNDE3ODU1MjQwNDQ3Njg3MSIsImFtb3VudE9mVGltZXNEb25lIjowLjQwODAwMDAwMDAxMjUyMSwiYm91Z2h0Ijp0cnVlfSwiZXhwYW5kZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDQyMTUwMjE3MzkzNzgxNTUiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC43OTQwMDAwMDAwMDc1MzU4LCJib3VnaHQiOnRydWV9LCJoZWF0ZWRDdXR0ZXJzRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDE1MDM4Mjk4OTI4Mjc0MzUyIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMzAyMDAwMDAwMDQ2NDYyLCJib3VnaHQiOnRydWV9LCJoZWF0ZWRQbGFudGVyc0VsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAyNTk5Nzc2NTA5MzU4NjA5IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNzI2MDAwMDAwMDQ5NzkzOSwiYm91Z2h0Ijp0cnVlfSwiZmVydGlsaXplckVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDAyMjMzNjY3MDQzMTIwMjgiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC41OTIwMDAwMDAwNDc3ODk5LCJib3VnaHQiOnRydWV9LCJzbWFsbEZpcmVFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMjg3MzA2MDg2NjAzMDM0MTQiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC44NzYwMDAwMDAwNDkyMDI4LCJ0b2dnbGUiOnRydWUsImJvdWdodCI6dHJ1ZX0sImJvbmZpcmVFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMTcyNzM2MjAzOTgxMTIyIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuMjU4MDAwMDAwMDQ5ODg5OSwidG9nZ2xlIjp0cnVlLCJib3VnaHQiOnRydWV9LCJraWxuRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDE1MzM4NTUyOTg1NDA5OTgxIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNjk0MDAwMDAwMDUwMDM5LCJ0b2dnbGUiOnRydWUsImJvdWdodCI6dHJ1ZX0sInBhcGVyRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDA4NDIwODY4MzQ3NDYyMDg1IiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuODgwMDAwMDAwMDAwODg1NCwiYm91Z2h0Ijp0cnVlfSwiYm94RWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDUyOTQxMTc2NDcwNzI1NzciLCJhbW91bnRPZlRpbWVzRG9uZSI6MC4zMDQwMDAwMDAwMDA5MzI4NiwiYm91Z2h0Ijp0cnVlfSwiY2xvdGhFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAwMzg2MjUwOTgxOTA3NTQwNSIsImFtb3VudE9mVGltZXNEb25lIjowLjQzMjAwMDAwMDAwMjIzMzI2LCJib3VnaHQiOnRydWV9LCJjb2FsRHJpbGxFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAxMTQ1NDU0NTQ1NDU0NTI3MyIsImFtb3VudE9mVGltZXNEb25lIjowLjUwMzk5OTk5OTk5OTg4NzYsInRvZ2dsZSI6dHJ1ZSwiYm91Z2h0Ijp0cnVlfSwiaGVhdnlEcmlsbEVsZiI6eyJidXlQcm9ncmVzcyI6IjAuMDExNDU0NTQ1NDU0NTQ1MjczIiwiYW1vdW50T2ZUaW1lc0RvbmUiOjAuNTAzOTk5OTk5OTk5ODg3NiwidG9nZ2xlIjp0cnVlLCJib3VnaHQiOnRydWV9LCJvaWxFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAxMTQ1NDU0NTQ1NDU0NTI3MyIsImFtb3VudE9mVGltZXNEb25lIjowLjUwMzk5OTk5OTk5OTg4NzYsInRvZ2dsZSI6dHJ1ZSwiYm91Z2h0Ijp0cnVlfSwibWV0YWxFbGYiOnsiYnV5UHJvZ3Jlc3MiOiIwLjAxMTQ1NDU0NTQ1NDU0NTI3MyIsImFtb3VudE9mVGltZXNEb25lIjowLjUwMzk5OTk5OTk5OTg4NzYsImJvdWdodCI6dHJ1ZX0sImR5ZUVsZiI6eyJidXlQcm9ncmVzcyI6MCwiYW1vdW50T2ZUaW1lc0RvbmUiOjAsImJvdWdodCI6ZmFsc2V9LCJwbGFzdGljRWxmIjp7ImJ1eVByb2dyZXNzIjoiMC4wMDM1MzM3MDQ0NzEwNjE2MDUiLCJhbW91bnRPZlRpbWVzRG9uZSI6MC45NDAwMDAwMDAwMDA3OTM1LCJib3VnaHQiOnRydWV9fSwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfSwiNSI6eyJlYXJuZWQiOnRydWV9LCI2Ijp7ImVhcm5lZCI6dHJ1ZX0sIjciOnsiZWFybmVkIjp0cnVlfSwiOCI6eyJlYXJuZWQiOnRydWV9LCI5Ijp7ImVhcm5lZCI6dHJ1ZX0sIjEwIjp7ImVhcm5lZCI6dHJ1ZX0sIjExIjp7ImVhcm5lZCI6dHJ1ZX19fX0sInBhcGVyIjp7Im1pbmltaXplZCI6ZmFsc2UsInBhcGVyIjoiNC44ODUyMTMyMDE1MzU2MzZlODciLCJ0b3RhbFBhcGVyIjoiNC44ODUyMTgwOTYyMDAxMjM1ZTg3IiwicGFwZXJDb252ZXJzaW9uIjp7ImdhaW5SZXNvdXJjZSI6IjQwNjkuOTk5OTk5OTk5OTk5In0sImJvb2tzIjp7ImN1dHRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNjgifSwicGxhbnRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNjgifSwiZXhwYW5kZXJzQm9vayI6eyJyZXNvdXJjZSI6IjQwNjkuOTk5OTk5OTk5OTk5IiwiYW1vdW50IjoiMTY4In0sImhlYXRlZEN1dHRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNjgifSwiaGVhdGVkUGxhbnRlcnNCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNjgifSwiZmVydGlsaXplckJvb2siOnsicmVzb3VyY2UiOiI0MDY5Ljk5OTk5OTk5OTk5OSIsImFtb3VudCI6IjE2OCJ9LCJzbWFsbEZpcmVCb29rIjp7InJlc291cmNlIjoiNDA2OS45OTk5OTk5OTk5OTkiLCJhbW91bnQiOiIxNjgifSwiYm9uZmlyZUJvb2siOnsicmVzb3VyY2UiOiI0MDY5Ljk5OTk5OTk5OTk5OSIsImFtb3VudCI6IjE2OCJ9LCJraWxuQm9vayI6eyJyZXNvdXJjZSI6IjQwNjkuOTk5OTk5OTk5OTk5IiwiYW1vdW50IjoiMTY4In0sInBhcGVyQm9vayI6eyJhbW91bnQiOiIxMiJ9LCJib3hCb29rIjp7ImFtb3VudCI6IjEzIn0sImNsb3RoQm9vayI6eyJhbW91bnQiOiIxNjgifSwibWluaW5nRHJpbGxCb29rIjp7ImFtb3VudCI6MH0sImhlYXZ5RHJpbGxCb29rIjp7ImFtb3VudCI6IjEzNiJ9LCJvaWxCb29rIjp7ImFtb3VudCI6IjEzNiJ9LCJtZXRhbEJvb2siOnsiYW1vdW50IjoiMTM2In0sImNvYWxEcmlsbEJvb2siOnsiYW1vdW50IjoiMTM2In0sImR5ZUJvb2siOnsiYW1vdW50IjowfSwicHJpbWFyeUR5ZUJvb2siOnsiYW1vdW50IjoiMTY4In0sInNlY29uZGFyeUR5ZUJvb2siOnsiYW1vdW50IjoiMTY4In0sInBsYXN0aWNCb29rIjp7ImFtb3VudCI6IjE2OCJ9fSwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sInVwZ3JhZGVzIjp7ImNsb3RoVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJkcmlsbGluZ1VwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwib2lsVXBncmFkZSI6eyJib3VnaHQiOnRydWV9fSwidXBncmFkZXMyIjp7ImFzaFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiYm9va1VwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiY2xhc3Nyb29tVXBncmFkZSI6eyJib3VnaHQiOmZhbHNlfSwidHJlZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfX0sIm1hc3RlcnkiOnsicGFwZXIiOiIzLjIzNDg3MjQwNDc0MjA0OWUyMyIsInRvdGFsUGFwZXIiOiIzLjIzNDg3NTMwMTUyMjI2NzhlMjMiLCJib29rcyI6eyJjdXR0ZXJzQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJwbGFudGVyc0Jvb2siOnsiYW1vdW50IjoiNDcifSwiZXhwYW5kZXJzQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJoZWF0ZWRDdXR0ZXJzQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJoZWF0ZWRQbGFudGVyc0Jvb2siOnsiYW1vdW50IjoiNDcifSwiZmVydGlsaXplckJvb2siOnsiYW1vdW50IjoiNDcifSwic21hbGxGaXJlQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJib25maXJlQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJraWxuQm9vayI6eyJhbW91bnQiOiI0NyJ9LCJwYXBlckJvb2siOnsiYW1vdW50IjoiNyJ9LCJib3hCb29rIjp7ImFtb3VudCI6IjcifSwiY2xvdGhCb29rIjp7ImFtb3VudCI6IjQ3In0sImNvYWxEcmlsbEJvb2siOnsiYW1vdW50IjoiMSJ9LCJoZWF2eURyaWxsQm9vayI6eyJhbW91bnQiOiIxIn0sIm9pbEJvb2siOnsiYW1vdW50IjoiMSJ9LCJtZXRhbEJvb2siOnsiYW1vdW50IjoiMSJ9LCJwcmltYXJ5RHllQm9vayI6eyJhbW91bnQiOjB9LCJzZWNvbmRhcnlEeWVCb29rIjp7ImFtb3VudCI6MH0sInBsYXN0aWNCb29rIjp7ImFtb3VudCI6IjQ3In19LCJ1cGdyYWRlcyI6eyJjbG90aFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiZHJpbGxpbmdVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sIm9pbFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfX0sInVwZ3JhZGVzMiI6eyJhc2hVcGdyYWRlIjp7ImJvdWdodCI6ZmFsc2V9LCJib29rVXBncmFkZSI6eyJib3VnaHQiOmZhbHNlfSwidHJlZVVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX19fSwibWFzdGVyZWQiOnRydWV9LCJib3hlcyI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJib3hlcyI6IjguMDUzMzM4NjIzNTA4NDAyZTc0IiwidG90YWxCb3hlcyI6IjguMDUzMzY2MjQ2OTU5MDUzZTc0IiwiYm94ZXNDb252ZXJzaW9uIjp7ImJhc2VSZXNvdXJjZSI6IjEwMjg0MzYwNjYxMDguNjU5NCIsImdhaW5SZXNvdXJjZSI6MH0sInVwZ3JhZGVzIjp7ImxvZ3NVcGdyYWRlIjp7InJlc291cmNlIjowLCJib3VnaHQiOnRydWV9LCJhc2hVcGdyYWRlIjp7InJlc291cmNlIjowLCJib3VnaHQiOnRydWV9LCJjb2FsVXBncmFkZSI6eyJyZXNvdXJjZSI6MCwiYm91Z2h0Ijp0cnVlfX0sImJ1eWFibGVzIjp7ImxvZ0JveGVzQnV5YWJsZSI6eyJyZXNvdXJjZSI6MCwiYW1vdW50IjoiNTUzIn0sImFzaEJveGVzQnV5YWJsZSI6eyJyZXNvdXJjZSI6MCwiYW1vdW50IjoiMjQ1In0sImNvYWxCb3hlc0J1eWFibGUiOnsicmVzb3VyY2UiOjAsImFtb3VudCI6IjE5MCJ9fSwicm93MlVwZ3JhZGVzIjp7Im9yZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sInBsYXN0aWNVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX19LCJyb3czVXBncmFkZXMiOnsiY2xvdGhVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sImR5ZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwieHBVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwiYnV5YWJsZXMyIjp7Im9yZUJveGVzQnV5YWJsZSI6eyJhbW91bnQiOiIxMjgifSwibWV0YWxCb3hlc0J1eWFibGUiOnsiYW1vdW50IjoiODcifSwicGxhc3RpY0JveGVzQnV5YWJsZSI6eyJhbW91bnQiOiI3MyJ9fSwibWFzdGVyeSI6eyJib3hlcyI6IjYuMDE0OTA5ODc4NTc1NDI5ZTE2IiwidG90YWxCb3hlcyI6IjYuMDE0OTEzNTI3NTQwMTMxZTE2IiwidXBncmFkZXMiOnsibG9nc1VwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwiYXNoVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJjb2FsVXBncmFkZSI6eyJib3VnaHQiOnRydWV9fSwicm93MlVwZ3JhZGVzIjp7Im9yZVVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX0sInBsYXN0aWNVcGdyYWRlIjp7ImJvdWdodCI6dHJ1ZX19LCJyb3czVXBncmFkZXMiOnsiY2xvdGhVcGdyYWRlIjp7ImJvdWdodCI6ZmFsc2V9LCJkeWVVcGdyYWRlIjp7ImJvdWdodCI6ZmFsc2V9LCJ4cFVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX19LCJidXlhYmxlcyI6eyJsb2dCb3hlc0J1eWFibGUiOnsiYW1vdW50IjoiNDcifSwiYXNoQm94ZXNCdXlhYmxlIjp7ImFtb3VudCI6IjMwIn0sImNvYWxCb3hlc0J1eWFibGUiOnsiYW1vdW50IjoiMjUifX0sImJ1eWFibGVzMiI6eyJvcmVCb3hlc0J1eWFibGUiOnsiYW1vdW50IjowfSwibWV0YWxCb3hlc0J1eWFibGUiOnsiYW1vdW50IjowfSwicGxhc3RpY0JveGVzQnV5YWJsZSI6eyJhbW91bnQiOjB9fX0sIm1hc3RlcmVkIjp0cnVlfSwibWV0YWwiOnsibWluaW1pemVkIjpmYWxzZSwib3JlIjoiMS43ODUzNzg2MTYzNjY2OTk2ZTI2IiwiYmVzdE9yZSI6IjQuMjU4NTg3ODA3NzgzNjc4ZTI2Iiwib3JlUHJvZ3Jlc3MiOiIwLjU4NTc5NzQxNzY3ODEzMDIiLCJtZXRhbCI6IjMuODE0NzIxMTMzNjY1MDU3ZTUxIiwiYmVzdE1ldGFsIjoiMy44MTgxMzQ0NjY5OTgzNjg2ZTUxIiwidG90YWxNZXRhbCI6IjQuNTUyOTkxNTcyMTQzMTc4ZTUxIiwic2ltcGxlUGlja2F4ZSI6eyJib3VnaHQiOnRydWV9LCJkb3VibGVQaWNrYXhlIjp7ImJvdWdodCI6ZmFsc2V9LCJjcnVjaWJsZSI6eyJib3VnaHQiOnRydWV9LCJjb2FsRHJpbGwiOnsiYm91Z2h0Ijp0cnVlfSwiaW5kdXN0cmlhbEZ1cm5hY2UiOnsiYm91Z2h0Ijp0cnVlfSwib3JlRHJpbGwiOnsiYW1vdW50IjoiOTUyODcyIn0sImluZHVzdHJpYWxDcnVjaWJsZSI6eyJhbW91bnQiOiI3MTU2MiJ9LCJhdXRvU21lbHRFbmFibGVkIjp0cnVlLCJob3R0ZXJGb3JnZSI6eyJhbW91bnQiOiI2OTU3NiJ9LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwiZWZmaWNpZW50RHJpbGwiOnsiYm91Z2h0Ijp0cnVlfSwibWFzdGVyeSI6eyJvcmUiOiI5Mjc1NzIxMjAuNDQyNjM2NSIsImJlc3RPcmUiOiIxOTUzMzA5MDA3LjA0NDA5OCIsIm9yZVByb2dyZXNzIjoiMC41MzEwMzEyNjYxMzgyMzQ2IiwibWV0YWwiOiIzLjY1MzIyOTE5NTExMTA0ZTE2IiwiYmVzdE1ldGFsIjoiMy42NTMyMjkxOTUxMTEwNGUxNiIsInRvdGFsTWV0YWwiOiIzLjY1MzI1NzAzMDYzMjQwNWUxNiIsInNpbXBsZVBpY2theGUiOnsiYm91Z2h0Ijp0cnVlfSwiZG91YmxlUGlja2F4ZSI6eyJib3VnaHQiOmZhbHNlfSwiY3J1Y2libGUiOnsiYm91Z2h0Ijp0cnVlfSwiY29hbERyaWxsIjp7ImJvdWdodCI6dHJ1ZX0sImluZHVzdHJpYWxGdXJuYWNlIjp7ImJvdWdodCI6dHJ1ZX0sImVmZmljaWVudERyaWxsIjp7ImJvdWdodCI6dHJ1ZX0sIm9yZURyaWxsIjp7ImFtb3VudCI6IjI3MCJ9LCJpbmR1c3RyaWFsQ3J1Y2libGUiOnsiYW1vdW50IjoiMjcifSwiaG90dGVyRm9yZ2UiOnsiYW1vdW50IjoiMjQifX0sIm1hc3RlcmVkIjp0cnVlfSwiY2xvdGgiOnsibWluaW1pemVkIjpmYWxzZSwiY2xvdGgiOiIxLjM1MzMxNjIyODEwODA3MDRlMTciLCJ0b3RhbENsb3RoIjoiMi45MTY2NDM5NDAxMzcwMDgzZTE3Iiwid29vbCI6IjkuNjA5NDE2NjczODY1MTgyZTE2Iiwic2hlZXAiOiI5LjkyNzI4NjQ2MjQ5MDc3M2UxNiIsImJ1aWxkUGVucyI6eyJhbW91bnQiOiIxMzU2OSJ9LCJiZXR0ZXJTaGVhcnMiOnsiYW1vdW50IjoiMTM0MTUifSwiZmFzdGVyU3Bpbm5pbmciOnsiYW1vdW50IjoiMTk5MDUifSwidHJlZXNVcGdyYWRlcyI6eyJ0cmVlc1VwZ3JhZGUzIjp7ImJvdWdodCI6dHJ1ZX0sInRyZWVzVXBncmFkZTIiOnsiYm91Z2h0Ijp0cnVlfSwidHJlZXNVcGdyYWRlMSI6eyJib3VnaHQiOnRydWV9LCJ0cmVlc1VwZ3JhZGU0Ijp7ImJvdWdodCI6dHJ1ZX19LCJtZXRhbFVwZ3JhZGVzIjp7Im1ldGFsVXBncmFkZTMiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlMiI6eyJib3VnaHQiOnRydWV9LCJtZXRhbFVwZ3JhZGUxIjp7ImJvdWdodCI6dHJ1ZX0sIm1ldGFsVXBncmFkZTQiOnsiYm91Z2h0Ijp0cnVlfX0sInBhcGVyVXBncmFkZXMiOnsicGFwZXJVcGdyYWRlMyI6eyJib3VnaHQiOnRydWV9LCJwYXBlclVwZ3JhZGUyIjp7ImJvdWdodCI6dHJ1ZX0sInBhcGVyVXBncmFkZTEiOnsiYm91Z2h0Ijp0cnVlfSwicGFwZXJVcGdyYWRlNCI6eyJib3VnaHQiOnRydWV9fSwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sImJyZWVkaW5nUHJvZ3Jlc3MiOjEsInNoZWFyaW5nUHJvZ3Jlc3MiOjEsInNwaW5uaW5nUHJvZ3Jlc3MiOjEsIm1hc3RlcnkiOnsiY2xvdGgiOiIxMTE0NTEiLCJ0b3RhbENsb3RoIjoiMTE4OTAxIiwid29vbCI6IjYyMzIwIiwic2hlZXAiOiI3NjQwMyIsImJ1aWxkUGVucyI6eyJhbW91bnQiOiIyNDgifSwiYmV0dGVyU2hlYXJzIjp7ImFtb3VudCI6IjMxMCJ9LCJmYXN0ZXJTcGlubmluZyI6eyJhbW91bnQiOiI0MTQifSwidHJlZXNVcGdyYWRlcyI6eyJ0cmVlc1VwZ3JhZGUxIjp7ImJvdWdodCI6dHJ1ZX0sInRyZWVzVXBncmFkZTIiOnsiYm91Z2h0Ijp0cnVlfSwidHJlZXNVcGdyYWRlMyI6eyJib3VnaHQiOnRydWV9LCJ0cmVlc1VwZ3JhZGU0Ijp7ImJvdWdodCI6dHJ1ZX19LCJtZXRhbFVwZ3JhZGVzIjp7Im1ldGFsVXBncmFkZTEiOnsiYm91Z2h0Ijp0cnVlfSwibWV0YWxVcGdyYWRlMiI6eyJib3VnaHQiOnRydWV9LCJtZXRhbFVwZ3JhZGUzIjp7ImJvdWdodCI6dHJ1ZX0sIm1ldGFsVXBncmFkZTQiOnsiYm91Z2h0Ijp0cnVlfX0sInBhcGVyVXBncmFkZXMiOnsicGFwZXJVcGdyYWRlMSI6eyJib3VnaHQiOnRydWV9LCJwYXBlclVwZ3JhZGUyIjp7ImJvdWdodCI6dHJ1ZX0sInBhcGVyVXBncmFkZTMiOnsiYm91Z2h0Ijp0cnVlfSwicGFwZXJVcGdyYWRlNCI6eyJib3VnaHQiOnRydWV9fX0sIm1hc3RlcmVkIjp0cnVlfSwib2lsIjp7Im1pbmltaXplZCI6ZmFsc2UsIm9pbCI6IjguOTc1NzQ5NTM3Mjg5ODllMjEiLCJ0b3RhbE9pbCI6IjkuMDExMTI4MDg3MzMxNzc3ZTIxIiwiZGVwdGgiOiI3Nzk4OSIsImRyaWxsUHJvZ3Jlc3MiOiI5LjAwNDk1NjkxNzgyODMwNmUzNSIsImFjdGl2ZUhlYXZ5IjoiODE2IiwiYnVpbGRIZWF2eSI6eyJhbW91bnQiOiI4MTYifSwiYWN0aXZlSGVhdnkyIjoiMzgwIiwiYnVpbGRIZWF2eTIiOnsiYW1vdW50IjoiMzgwIn0sImFjdGl2ZUV4dHJhY3RvciI6Ijg3IiwiYnVpbGRFeHRyYWN0b3IiOnsiYW1vdW50IjoiODcifSwiYWN0aXZlUHVtcCI6IjgyIiwiYnVpbGRQdW1wIjp7ImFtb3VudCI6IjgyIn0sImFjdGl2ZUJ1cm5lciI6IjUxOSIsImJ1aWxkQnVybmVyIjp7ImFtb3VudCI6IjUxOSJ9LCJhY3RpdmVTbWVsdGVyIjoiMzI3IiwiYnVpbGRTbWVsdGVyIjp7ImFtb3VudCI6IjMyNyJ9LCJkZXB0aE1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX0sIjUiOnsiZWFybmVkIjp0cnVlfSwiNiI6eyJlYXJuZWQiOnRydWV9LCI3Ijp7ImVhcm5lZCI6dHJ1ZX19LCJjb2xsYXBzZWREZXB0aE1pbGVzdG9uZXMiOnRydWUsInJvdzFVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzJVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJvaWxNaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX19LCJjb2xsYXBzZWRPaWxNaWxlc3RvbmVzIjp0cnVlLCJyb3czVXBncmFkZXMiOnsiMCI6eyJib3VnaHQiOnRydWV9LCIxIjp7ImJvdWdodCI6dHJ1ZX0sIjIiOnsiYm91Z2h0Ijp0cnVlfSwiMyI6eyJib3VnaHQiOnRydWV9LCI0Ijp7ImJvdWdodCI6dHJ1ZX19LCJtYXN0ZXJ5Ijp7Im9pbCI6IjUwODA2MDY5MS44MzU4MzA2IiwidG90YWxPaWwiOiI1MTE0MTQ2NDEuODM1ODMwNiIsImRlcHRoIjoiMjMwOTMiLCJkcmlsbFByb2dyZXNzIjoiMTM1NTcyNTUyMzE2NC43ODEyIiwiYWN0aXZlSGVhdnkiOiIxMDMiLCJidWlsZEhlYXZ5Ijp7ImFtb3VudCI6IjEwMyJ9LCJhY3RpdmVIZWF2eTIiOiI0MSIsImJ1aWxkSGVhdnkyIjp7ImFtb3VudCI6IjQxIn0sImFjdGl2ZUV4dHJhY3RvciI6IjExIiwiYnVpbGRFeHRyYWN0b3IiOnsiYW1vdW50IjoiMTEifSwiYWN0aXZlUHVtcCI6IjExIiwiYnVpbGRQdW1wIjp7ImFtb3VudCI6IjExIn0sImFjdGl2ZUJ1cm5lciI6IjI1IiwiYnVpbGRCdXJuZXIiOnsiYW1vdW50IjoiMjUifSwiYWN0aXZlU21lbHRlciI6IjEyIiwiYnVpbGRTbWVsdGVyIjp7ImFtb3VudCI6IjEyIn0sImRlcHRoTWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfSwiNSI6eyJlYXJuZWQiOnRydWV9LCI2Ijp7ImVhcm5lZCI6dHJ1ZX0sIjciOnsiZWFybmVkIjp0cnVlfX0sIm9pbE1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfX0sInJvdzFVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzJVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9LCIzIjp7ImJvdWdodCI6dHJ1ZX0sIjQiOnsiYm91Z2h0Ijp0cnVlfX0sInJvdzNVcGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6ZmFsc2V9LCIxIjp7ImJvdWdodCI6ZmFsc2V9LCIyIjp7ImJvdWdodCI6ZmFsc2V9LCIzIjp7ImJvdWdodCI6ZmFsc2V9LCI0Ijp7ImJvdWdodCI6ZmFsc2V9fX0sIm1hc3RlcmVkIjp0cnVlfSwicGxhc3RpYyI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJwbGFzdGljIjoiMi4xMDc3NTYzMTM4NTI2MzNlMTciLCJ0b3RhbFBsYXN0aWMiOiIzLjU0MzMwOTU5NjM4NDY1NzVlMTciLCJidWlsZFJlZmluZXJ5Ijp7ImFtb3VudCI6IjU0NCJ9LCJhY3RpdmVSZWZpbmVyeSI6IjU0NCIsInVwZ3JhZGVzIjp7InBhcGVyVG9vbHMiOnsiYm91Z2h0Ijp0cnVlfSwiYm94VG9vbHMiOnsiYm91Z2h0Ijp0cnVlfSwiY2xvdGhUb29scyI6eyJib3VnaHQiOnRydWV9fSwiZWxmVXBncmFkZXMiOnsicGFwZXJFbGYiOnsiYm91Z2h0Ijp0cnVlfSwiYm94RWxmIjp7ImJvdWdodCI6dHJ1ZX0sImNsb3RoRWxmIjp7ImJvdWdodCI6dHJ1ZX19LCJidXlhYmxlcyI6eyJwYXNzaXZlUGFwZXIiOnsiYW1vdW50IjoiMTE3NjAxNyJ9LCJwYXNzaXZlQm94ZXMiOnsiYW1vdW50IjoiMTE3NjAxNyJ9LCJjbG90aEdhaW5zIjp7ImFtb3VudCI6IjExNzYwMTcifX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJtYXN0ZXJ5Ijp7InBsYXN0aWMiOiIxNjQwMDcwLjQ1MjIzMjkxMiIsInRvdGFsUGxhc3RpYyI6IjE2NjE5MTAuNDUyMjMyOTEyIiwiYWN0aXZlUmVmaW5lcnkiOiI0NiIsImJ1aWxkUmVmaW5lcnkiOnsiYW1vdW50IjoiNDYifSwidXBncmFkZXMiOnsicGFwZXJUb29scyI6eyJib3VnaHQiOnRydWV9LCJib3hUb29scyI6eyJib3VnaHQiOnRydWV9LCJjbG90aFRvb2xzIjp7ImJvdWdodCI6dHJ1ZX19LCJlbGZVcGdyYWRlcyI6eyJwYXBlckVsZiI6eyJib3VnaHQiOnRydWV9LCJib3hFbGYiOnsiYm91Z2h0Ijp0cnVlfSwiY2xvdGhFbGYiOnsiYm91Z2h0Ijp0cnVlfX0sImJ1eWFibGVzIjp7InBhc3NpdmVQYXBlciI6eyJhbW91bnQiOiI2NjEifSwicGFzc2l2ZUJveGVzIjp7ImFtb3VudCI6IjY2MSJ9LCJjbG90aEdhaW5zIjp7ImFtb3VudCI6IjY2MSJ9fX0sIm1hc3RlcmVkIjp0cnVlfSwiZHllcyI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJkeWVzIjp7InJlZCI6eyJhbW91bnQiOiI3NjI3OTgzMjc1Ny44OTkxOSIsImJ1eWFibGUiOnsiYW1vdW50IjoiODAxIn19LCJ5ZWxsb3ciOnsiYW1vdW50IjoiMTg4OTIyNDg3Mzg2LjcwOTc1IiwiYnV5YWJsZSI6eyJhbW91bnQiOiI3NjcifX0sImJsdWUiOnsiYW1vdW50IjoiMjU3MjYyNzI1ODguNjE2MzkiLCJidXlhYmxlIjp7ImFtb3VudCI6IjczNSJ9fSwib3JhbmdlIjp7ImFtb3VudCI6IjQxNTc2IiwiYnV5YWJsZSI6eyJhbW91bnQiOiI2ODMifX0sImdyZWVuIjp7ImFtb3VudCI6IjMyMTk2IiwiYnV5YWJsZSI6eyJhbW91bnQiOiI1ODkifX0sInB1cnBsZSI6eyJhbW91bnQiOiIzMDMyMCIsImJ1eWFibGUiOnsiYW1vdW50IjoiNTc1In19LCJibGFjayI6eyJidXlhYmxlIjp7ImFtb3VudCI6IjE0NyJ9fX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJ1cGdyYWRlcyI6eyJibHVlRHllVXBnIjp7ImJvdWdodCI6dHJ1ZX0sInJlZER5ZVVwZyI6eyJib3VnaHQiOnRydWV9LCJ5ZWxsb3dEeWVVcGciOnsiYm91Z2h0Ijp0cnVlfSwieWVsbG93RHllVXBnMiI6eyJib3VnaHQiOnRydWV9LCJyZWREeWVVcGcyIjp7ImJvdWdodCI6dHJ1ZX0sImJsdWVEeWVVcGcyIjp7ImJvdWdodCI6dHJ1ZX0sImNvYWxVcGciOnsiYm91Z2h0Ijp0cnVlfX0sIm1hc3RlcnkiOnsiZHllcyI6eyJyZWQiOnsiYW1vdW50IjowLCJidXlhYmxlIjp7ImFtb3VudCI6IjE1In19LCJncmVlbiI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiNSJ9fSwiYmx1ZSI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiMTQifX0sInllbGxvdyI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiMTIifX0sInB1cnBsZSI6eyJhbW91bnQiOjAsImJ1eWFibGUiOnsiYW1vdW50IjoiNCJ9fSwib3JhbmdlIjp7ImFtb3VudCI6MCwiYnV5YWJsZSI6eyJhbW91bnQiOiI0In19fSwidXBncmFkZXMiOnsiYmx1ZUR5ZVVwZyI6eyJib3VnaHQiOnRydWV9LCJyZWREeWVVcGciOnsiYm91Z2h0Ijp0cnVlfSwieWVsbG93RHllVXBnIjp7ImJvdWdodCI6dHJ1ZX0sInllbGxvd0R5ZVVwZzIiOnsiYm91Z2h0Ijp0cnVlfSwicmVkRHllVXBnMiI6eyJib3VnaHQiOnRydWV9LCJibHVlRHllVXBnMiI6eyJib3VnaHQiOnRydWV9LCJjb2FsVXBnIjp7ImJvdWdodCI6dHJ1ZX19fSwibWFzdGVyZWQiOnRydWV9LCJtYW5hZ2VtZW50Ijp7Im1pbmltaXplZCI6ZmFsc2UsImVsZlRyYWluaW5nIjp7ImN1dHRlckVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIzMTI3NDY4LjIyOTc1OTUwMTgiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sInBsYW50ZXJFbGZUcmFpbmluZyI6eyJzdGF0ZSI6dHJ1ZSwiZXhwIjoiNjI0ODQ1Ni4yMTU2NjA1NCIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiZXhwYW5kZXJzRWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiI5Mzc2NDUxLjQzODk2MTQ0MyIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiaGVhdGVkQ3V0dGVyRWxmVHJhaW5pbmciOnsic3RhdGUiOnRydWUsImV4cCI6IjEyNDk2MzI3LjM5NTk2NDYxNSIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiaGVhdGVkUGxhbnRlckVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIxNTYyMzk4My4yMDc5NDI2MyIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiZmVydGlsaXplckVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIxODc4MDg4Mi45MTMyNTQxMiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwic21hbGxmaXJlRWxmVHJhaW5pbmciOnsic3RhdGUiOnRydWUsImV4cCI6IjIxOTA3NDkzLjM5MDE1MzU0NiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiYm9uZmlyZUVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIyNTAwNjQzNi4wMzM4ODIzMjciLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sImZpcmVFbGZUcmFpbmluZyI6eyIyIjp7InN0YXRlIjp0cnVlLCJleHAiOjB9fSwia2lsbkVsZlRyYWluaW5nIjp7InN0YXRlIjp0cnVlLCJleHAiOiIyODE5MzUwNy43OTA3MTA5ODIiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sInBhcGVyRWxmVHJhaW5pbmciOnsic3RhdGUiOnRydWUsImV4cCI6IjEwNDMwOTA0LjQ2MzY2NDMwNiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiYm94RWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiIxMTQ3MDIyNC41MDQ5ODIzNDUiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sImNsb3RoRWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiIzNzQ4OTM1NS4wNDcwMTA3NSIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiY29hbERyaWxsRWxmVHJhaW5pbmciOnsic3RhdGUiOmZhbHNlLCJleHAiOiI0MDYyMzY4NS4wNDA5MTI3NCIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwibWV0YWxFbGZUcmFpbmluZyI6eyJzdGF0ZSI6ZmFsc2UsImV4cCI6IjUwMDQ2MDI3Ljk5OTYwOTU4IiwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfX19LCJvaWxFbGZUcmFpbmluZyI6eyJzdGF0ZSI6ZmFsc2UsImV4cCI6IjQ2ODYwMzcxLjU0ODQxMTg3NiIsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOnRydWV9LCIxIjp7ImVhcm5lZCI6dHJ1ZX0sIjIiOnsiZWFybmVkIjp0cnVlfSwiMyI6eyJlYXJuZWQiOnRydWV9LCI0Ijp7ImVhcm5lZCI6dHJ1ZX19fSwiaGVhdnlEcmlsbEVsZlRyYWluaW5nIjp7InN0YXRlIjpmYWxzZSwiZXhwIjoiNDM3Mzk3MzUuNjE1MTU0MzkiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sImR5ZUVsZlRyYWluaW5nIjp7InN0YXRlIjpmYWxzZSwiZXhwIjoiNTMxMjc0MDAuNjQ3NjM2MTUiLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjp0cnVlfSwiMSI6eyJlYXJuZWQiOnRydWV9LCIyIjp7ImVhcm5lZCI6dHJ1ZX0sIjMiOnsiZWFybmVkIjp0cnVlfSwiNCI6eyJlYXJuZWQiOnRydWV9fX0sInBsYXN0aWNFbGZUcmFpbmluZyI6eyJzdGF0ZSI6ZmFsc2UsImV4cCI6IjU2MzQyNzcwLjQ1NjgxNTUyIiwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6dHJ1ZX0sIjEiOnsiZWFybmVkIjp0cnVlfSwiMiI6eyJlYXJuZWQiOnRydWV9LCIzIjp7ImVhcm5lZCI6dHJ1ZX0sIjQiOnsiZWFybmVkIjp0cnVlfX19fSwiY3VycmVudFNob3duIjoiVGluc2VsIiwiZ2VuZXJhbFRhYkNvbGxhcHNlZCI6e30sInRlYWNoaW5nIjp7ImJvdWdodCI6dHJ1ZX0sInNjaG9vbHMiOnsiYW1vdW50IjoiNSJ9LCJjbGFzc3Jvb21zIjp7ImFtb3VudCI6IjEwNDYifSwiY2xhc3Nyb29tVXBncmFkZSI6eyJib3VnaHQiOnRydWV9LCJmb2N1c011bHRpcGxpZXIiOiIxLjAwNjE1NzgzMjc4NzQ5ODciLCJ1cGdyYWRlcyI6eyIwIjp7ImJvdWdodCI6dHJ1ZX0sIjEiOnsiYm91Z2h0Ijp0cnVlfSwiMiI6eyJib3VnaHQiOnRydWV9fSwiZm9jdXNUYXJnZXRzIjp7fSwiZm9jdXNDb29sZG93biI6MCwiZm9jdXNUaW1lIjowLCJhZHZhbmNlZFVwZ3JhZGUiOnsiYm91Z2h0Ijp0cnVlfSwidXBncmFkZXMyIjp7IjAiOnsiYm91Z2h0Ijp0cnVlfSwiMSI6eyJib3VnaHQiOnRydWV9LCIyIjp7ImJvdWdodCI6dHJ1ZX19LCJmb2N1c011bHRpIjoiMi40NTU5MTY0ODI3MjUwMTEiLCJtYXN0ZXJ5Ijp7ImVsZlRyYWluaW5nIjp7ImJvbmZpcmVFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJib3hFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJjbG90aEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImNvYWxEcmlsbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImN1dHRlckVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImV4cGFuZGVyc0VsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImZlcnRpbGl6ZXJFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJoZWF0ZWRDdXR0ZXJFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJoZWF0ZWRQbGFudGVyRWxmVHJhaW5pbmciOnsiZXhwIjowLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjpmYWxzZX0sIjEiOnsiZWFybmVkIjpmYWxzZX0sIjIiOnsiZWFybmVkIjpmYWxzZX0sIjMiOnsiZWFybmVkIjpmYWxzZX0sIjQiOnsiZWFybmVkIjpmYWxzZX19fSwiaGVhdnlEcmlsbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImtpbG5FbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19LCJtZXRhbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sIm9pbEVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sInBhcGVyRWxmVHJhaW5pbmciOnsiZXhwIjowLCJtaWxlc3RvbmVzIjp7IjAiOnsiZWFybmVkIjpmYWxzZX0sIjEiOnsiZWFybmVkIjpmYWxzZX0sIjIiOnsiZWFybmVkIjpmYWxzZX0sIjMiOnsiZWFybmVkIjpmYWxzZX0sIjQiOnsiZWFybmVkIjpmYWxzZX19fSwicGxhbnRlckVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sInNtYWxsZmlyZUVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sImR5ZUVsZlRyYWluaW5nIjp7ImV4cCI6MCwibWlsZXN0b25lcyI6eyIwIjp7ImVhcm5lZCI6ZmFsc2V9LCIxIjp7ImVhcm5lZCI6ZmFsc2V9LCIyIjp7ImVhcm5lZCI6ZmFsc2V9LCIzIjp7ImVhcm5lZCI6ZmFsc2V9LCI0Ijp7ImVhcm5lZCI6ZmFsc2V9fX0sInBsYXN0aWNFbGZUcmFpbmluZyI6eyJleHAiOjAsIm1pbGVzdG9uZXMiOnsiMCI6eyJlYXJuZWQiOmZhbHNlfSwiMSI6eyJlYXJuZWQiOmZhbHNlfSwiMiI6eyJlYXJuZWQiOmZhbHNlfSwiMyI6eyJlYXJuZWQiOmZhbHNlfSwiNCI6eyJlYXJuZWQiOmZhbHNlfX19fSwidGVhY2hpbmciOnsiYm91Z2h0IjpmYWxzZX0sInNjaG9vbHMiOnsiYW1vdW50IjowfSwiY2xhc3Nyb29tcyI6eyJhbW91bnQiOjB9LCJjbGFzc3Jvb21VcGdyYWRlIjp7ImJvdWdodCI6ZmFsc2V9LCJhZHZhbmNlZFVwZ3JhZGUiOnsiYm91Z2h0IjpmYWxzZX0sInVwZ3JhZGVzIjp7IjAiOnsiYm91Z2h0IjpmYWxzZX0sIjEiOnsiYm91Z2h0IjpmYWxzZX0sIjIiOnsiYm91Z2h0IjpmYWxzZX19LCJ1cGdyYWRlczIiOnsiMCI6eyJib3VnaHQiOmZhbHNlfSwiMSI6eyJib3VnaHQiOmZhbHNlfSwiMiI6eyJib3VnaHQiOmZhbHNlfX0sImZvY3VzTXVsdGkiOiIxLjAxMjY5ODQ3NTQyMDExODciLCJmb2N1c1RhcmdldHMiOnt9LCJmb2N1c0Nvb2xkb3duIjowLCJmb2N1c1RpbWUiOjB9fSwid3JhcHBpbmdQYXBlciI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJ3cmFwcGluZ1BhcGVyIjp7ImNocmlzdG1hcyI6eyJidXlhYmxlIjp7ImFtb3VudCI6IjY0In19LCJyYWluYm93Ijp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNDYifX0sImphenp5Ijp7ImJ1eWFibGUiOnsiYW1vdW50IjoiODEifX0sInN1bnNoaW5lIjp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNTUifX0sIm9jZWFuIjp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNTAifX0sImJlYWNoIjp7ImJ1eWFibGUiOnsiYW1vdW50IjoiNTcifX19LCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fSwibWlsZXN0b25lcyI6eyJwcmltYXJ5Qm9vc3QiOnsiZWFybmVkIjpmYWxzZX0sInNlY29uZGFyeUJvb3N0Ijp7ImVhcm5lZCI6ZmFsc2V9LCJidXlNYXhQcmltYXJ5Ijp7ImVhcm5lZCI6ZmFsc2V9LCJzZWNvbmRhcnlOb1Jlc2V0Ijp7ImVhcm5lZCI6ZmFsc2V9LCJidXlNYXhTZWNvbmRhcnkiOnsiZWFybmVkIjpmYWxzZX0sInVubG9ja0R5ZUVsZiI6eyJlYXJuZWQiOmZhbHNlfX0sImNvbGxhcHNlTWlsZXN0b25lcyI6dHJ1ZSwidW5sb2NrRHllRWxmTWlsZXN0b25lIjp7ImVhcm5lZCI6dHJ1ZX19LCJsZXR0ZXJzIjp7Im1pbmltaXplZCI6ZmFsc2UsImxldHRlcnMiOiIxLjMwOTQ4NTQxMzA1MjYzMjZlNTQiLCJ0b3RhbExldHRlcnMiOiIyLjYxODk3MDgyNjEwNTI2NTVlNTQiLCJwcm9jZXNzaW5nUHJvZ3Jlc3MiOiI0LjQxMzczODg1NTQ4NzgxM2UtMjgiLCJidXlhYmxlcyI6eyJtZXRhbEJ1eWFibGUiOnsiYW1vdW50IjoiMTIifSwicGxhc3RpY0J1eWFibGUiOnsiYW1vdW50IjoiMjMifSwicGFwZXJCdXlhYmxlIjp7ImFtb3VudCI6IjQzIn19LCJtaWxlc3RvbmVzIjp7ImF1dG9TbWVsdGluZ01pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJtaW5pbmdNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfSwic3luZXJneU1pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJpbmR1c3RyaWFsQ3J1Y2libGVNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJjb2xsYXBzZU1pbGVzdG9uZXMiOnRydWUsIm1hc3RlcnkiOnsibGV0dGVycyI6IjEyNTU4MDA1LjU3MTUxMDg1IiwidG90YWxMZXR0ZXJzIjoiMTI1NTgwMDUuNTcxNTEwODUiLCJidXlhYmxlcyI6eyJtZXRhbEJ1eWFibGUiOnsiYW1vdW50IjowfSwicGxhc3RpY0J1eWFibGUiOnsiYW1vdW50IjowfSwicGFwZXJCdXlhYmxlIjp7ImFtb3VudCI6MH19LCJtaWxlc3RvbmVzIjp7ImF1dG9TbWVsdGluZ01pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJtaW5pbmdNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfSwic3luZXJneU1pbGVzdG9uZSI6eyJlYXJuZWQiOnRydWV9LCJpbmR1c3RyaWFsQ3J1Y2libGVNaWxlc3RvbmUiOnsiZWFybmVkIjp0cnVlfX19LCJtYXN0ZXJlZCI6dHJ1ZX0sInJpYmJvbiI6eyJtaW5pbWl6ZWQiOmZhbHNlLCJyaWJib24iOiIxNiIsIm1pbGVzdG9uZXMiOnsic2Vjb25kYXJ5RHllRWxmIjp7ImVhcm5lZCI6dHJ1ZX0sImR5ZUJvb2siOnsiZWFybmVkIjp0cnVlfX0sInJpYmJvblByb2dyZXNzIjoxMCwiY29sbGFwc2VNaWxlc3RvbmVzIjp0cnVlLCJnZW5lcmFsVGFiQ29sbGFwc2VkIjp7fX0sInRveXMiOnsibWluaW1pemVkIjpmYWxzZSwiY2xvdGhlcyI6IjE1MSIsIndvb2RlbkJsb2NrcyI6Ijk3IiwidHJ1Y2tzIjoiMTYwIiwidG90YWxUb3lzIjoiNTAwIiwiYnV5YWJsZXMiOnsiMCI6eyJhbW91bnQiOiIxNTEifSwiMSI6eyJhbW91bnQiOiI5NyJ9LCIyIjp7ImFtb3VudCI6IjE2MCJ9fSwicm93MVVwZ3JhZGVzIjp7IjAiOnsiYm91Z2h0Ijp0cnVlfSwiMSI6eyJib3VnaHQiOnRydWV9LCIyIjp7ImJvdWdodCI6dHJ1ZX19LCJtaWxlc3RvbmVzIjp7Im1pbGVzdG9uZTEiOnsiZWFybmVkIjp0cnVlfSwibWlsZXN0b25lMiI6eyJlYXJuZWQiOnRydWV9LCJtaWxlc3RvbmUzIjp7ImVhcm5lZCI6dHJ1ZX0sIm1pbGVzdG9uZTQiOnsiZWFybmVkIjp0cnVlfX0sImdlbmVyYWxUYWJDb2xsYXBzZWQiOnt9LCJjb2xsYXBzZU1pbGVzdG9uZXMiOnRydWV9fSwiYXV0b1BhdXNlIjp0cnVlLCJ1c2luZ0xvZyI6ZmFsc2V9 From eede682a69c01775a005912f850676405985100e Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Tue, 20 Dec 2022 19:12:54 -0600 Subject: [PATCH 10/18] Prepare toys for release --- src/data/Scene.vue | 2 + src/data/layers/dyes.tsx | 24 +++++---- src/data/layers/toys.tsx | 97 ++++++++++++++++++++++++------------- src/data/projEntry.tsx | 10 ++-- src/data/symbols/truck.png | Bin 0 -> 22435 bytes 5 files changed, 87 insertions(+), 46 deletions(-) create mode 100644 src/data/symbols/truck.png diff --git a/src/data/Scene.vue b/src/data/Scene.vue index 1e090a1..8843cc2 100644 --- a/src/data/Scene.vue +++ b/src/data/Scene.vue @@ -58,6 +58,7 @@ + @@ -79,6 +80,7 @@ import advManagement from "./symbols/workshopMansion.png"; import letters from "./symbols/letterbox.png"; import wrappingPaper from "./symbols/wrappingPaper.png"; import ribbons from "./symbols/ribbons.png"; +import toys from "./symbols/truck.png"; defineProps<{ day: number; diff --git a/src/data/layers/dyes.tsx b/src/data/layers/dyes.tsx index 4eb5246..2582071 100644 --- a/src/data/layers/dyes.tsx +++ b/src/data/layers/dyes.tsx @@ -374,6 +374,8 @@ const layer = createLayer(id, function (this: BaseLayer) { enabled: main.days[day - 1].opened })); + const visibility = convertComputable(options.visibility ?? Visibility.Visible); + return { name: options.name, amount, @@ -381,15 +383,19 @@ const layer = createLayer(id, function (this: BaseLayer) { hotkey, toGenerate, computedToGenerate, - display: jsx(() => ( - - )) + display: jsx(() => + unref(visibility) === Visibility.Visible ? ( + + ) : ( + "" + ) + ) }; } diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index f5d9612..97f87a8 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -4,49 +4,38 @@ */ import Spacer from "components/layout/Spacer.vue"; import Modal from "components/Modal.vue"; -import { main } from "data/projEntry"; -import { createBar } from "features/bars/bar"; import { createCollapsibleMilestones, createCollapsibleModifierSections, setUpDailyProgressTracker } from "data/common"; +import { main } from "data/projEntry"; import { createBuyable, GenericBuyable } from "features/buyable"; -import { createClickable } from "features/clickables/clickable"; import { jsx, showIf } from "features/feature"; -import { createHotkey } from "features/hotkey"; -import MainDisplay from "features/resources/MainDisplay.vue"; import { createMilestone } from "features/milestones/milestone"; -import { createResource, Resource } from "features/resources/resource"; +import MainDisplay from "features/resources/MainDisplay.vue"; +import { createResource } from "features/resources/resource"; import { createUpgrade } from "features/upgrades/upgrade"; import { globalBus } from "game/events"; import { BaseLayer, createLayer } from "game/layers"; -import { - createAdditiveModifier, - createExponentialModifier, - createMultiplicativeModifier, - createSequentialModifier, - Modifier -} from "game/modifiers"; -import { noPersist, persistent } from "game/persistence"; -import Decimal, { DecimalSource, format, formatGain, formatLimit, formatWhole } from "util/bignum"; -import { Direction, WithRequired } from "util/common"; +import { createSequentialModifier } from "game/modifiers"; +import { noPersist } from "game/persistence"; +import Decimal, { DecimalSource, format, formatWhole } from "util/bignum"; import { render, renderGrid, renderRow } from "util/vue"; import { computed, ref } from "vue"; +import cloth from "./cloth"; +import dyes from "./dyes"; import metal from "./metal"; import plastic from "./plastic"; -import cloth from "./cloth"; import trees from "./trees"; -import dyes from "./dyes"; -import paper from "./paper"; import workshop from "./workshop"; + const id = "toys"; const day = 17; const layer = createLayer(id, function (this: BaseLayer) { const name = "Toys"; - const colorBright = "#4BDC13"; - const colorDark = "green"; + const color = "cornflowerblue"; const clothes = createResource(0, "clothes"); const woodenBlocks = createResource(0, " wooden blocks"); @@ -79,8 +68,28 @@ const layer = createLayer(id, function (this: BaseLayer) {
You have {formatWhole(clothes.value)} clothes.
- Costs {format(clothesCost.value.cloth)} cloth and requires{" "} - {format(clothesCost.value.dye)} of red, yellow, and blue dye + Costs{" "} + + {format(clothesCost.value.cloth)} cloth + {" "} + and requires{" "} + + Decimal.lt(d.amount.value, clothesCost.value.dye) + ) + ? "unaffordable" + : "" + } + > + {format(clothesCost.value.dye)} of red, yellow, and blue dye +
)), @@ -154,8 +163,26 @@ const layer = createLayer(id, function (this: BaseLayer) {
You have {formatWhole(trucks.value)} trucks.
- Costs {format(trucksCost.value.metal)} metal and{" "} - {format(trucksCost.value.plastic)} plastic + Costs{" "} + + {format(trucksCost.value.metal)} metal + {" "} + and{" "} + + {format(trucksCost.value.plastic)} plastic +
)), @@ -213,22 +240,25 @@ const layer = createLayer(id, function (this: BaseLayer) { requirement: "100 toys", effectDisplay: "Unlock black dyes." }, - shouldEarn: () => Decimal.gte(toySum.value, 100) + shouldEarn: () => Decimal.gte(toySum.value, 100), + visibility: () => showIf(milestone1.earned.value) })); - + const milestone3 = createMilestone(() => ({ display: { requirement: "200 toys", effectDisplay: "Beach wrapping paper is much more powerful." }, - shouldEarn: () => Decimal.gte(toySum.value, 200) + shouldEarn: () => Decimal.gte(toySum.value, 200), + visibility: () => showIf(milestone2.earned.value) })); const milestone4 = createMilestone(() => ({ display: { requirement: "350 toys", effectDisplay: "Gain 50x oil and plastic." }, - shouldEarn: () => Decimal.gte(toySum.value, 350) + shouldEarn: () => Decimal.gte(toySum.value, 350), + visibility: () => showIf(milestone3.earned.value) })); const milestones = { milestone1, milestone2, milestone3, milestone4 }; const { collapseMilestones, display: milestonesDisplay } = @@ -287,7 +317,7 @@ const layer = createLayer(id, function (this: BaseLayer) { return { name, day, - color: colorBright, + color, clothes, woodenBlocks, trucks, @@ -305,19 +335,19 @@ const layer = createLayer(id, function (this: BaseLayer) { @@ -326,6 +356,7 @@ const layer = createLayer(id, function (this: BaseLayer) { {renderGrid(row1Upgrades)} +
You have made {formatWhole(toySum.value)} total toys
{milestonesDisplay()} )), diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index 4123930..84e14dd 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -48,6 +48,7 @@ import paperSymbol from "./symbols/paperStacks.png"; import plasticSymbol from "./symbols/plastic.png"; import ribbonsSymbol from "./symbols/ribbons.png"; import workshopSymbol from "./symbols/sws.png"; +import toysSymbol from "./symbols/truck.png"; import treeSymbol from "./symbols/tree.png"; import advManagementSymbol from "./symbols/workshopMansion.png"; import wrappingPaperSymbol from "./symbols/wrappingPaper.png"; @@ -416,10 +417,11 @@ export const main = createLayer("main", function (this: BaseLayer) { createDay(() => ({ day: 17, shouldNotify: false, - layer: "toys", // "toys1" - symbol: "", - story: "", - completedStory: "", + layer: "toys", + symbol: toysSymbol, + story: "You've had enough of this running around and stalling - it is time to create some toys NOW! You have everything you need and then some, so let's finally just sit down and get this process started!", + completedStory: + "In your haste you may have been a bit wasteful with resources, but it feels really good to finally make some meaningful process on making toys for Santa. You already envision plans on how to get elves to help you out and start pumping out these toys, but for now... Good Job!", masteredStory: "" })), createDay(() => ({ diff --git a/src/data/symbols/truck.png b/src/data/symbols/truck.png new file mode 100644 index 0000000000000000000000000000000000000000..5f988442b92689cd89511a42d10f59e2df13d4b3 GIT binary patch literal 22435 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 Laz9(=crp1OxB+q% literal 0 HcmV?d00001 From c20f6282a83b47ffbfeeaf7563161c021bf2ce35 Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Tue, 20 Dec 2022 19:33:02 -0600 Subject: [PATCH 11/18] Hardcap letters at 8e9 --- src/data/layers/letters.tsx | 5 +++-- src/data/projEntry.tsx | 26 +------------------------- 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/src/data/layers/letters.tsx b/src/data/layers/letters.tsx index d7bb010..1191824 100644 --- a/src/data/layers/letters.tsx +++ b/src/data/layers/letters.tsx @@ -79,7 +79,9 @@ const layer = createLayer(id, function (this: BaseLayer) { processingProgress.value, computedProcessingCooldown.value ).floor(); - letters.value = Decimal.times(amount, computedLettersGain.value).add(letters.value); + letters.value = Decimal.times(amount, computedLettersGain.value) + .add(letters.value) + .min(8e9); processingProgress.value = 0; } })); @@ -216,7 +218,6 @@ const layer = createLayer(id, function (this: BaseLayer) { multiplier: () => Decimal.div(paperBuyable.amount.value, 2).add(1), description: "Printed Labels" })) - ]); const computedLettersGain = computed(() => lettersGain.apply(1)); const processingCooldown = createSequentialModifier(() => [ diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index 84e14dd..7b2ac9e 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -615,29 +615,5 @@ export function fixOldSave( oldVersion: string | undefined, player: Partial // eslint-disable-next-line @typescript-eslint/no-empty-function -): void { - if (!["0.0", "0.1", "0.2", "0.3", "0.4"].includes(oldVersion ?? "")) { - return; - } - if ((player.layers?.workshop as LayerData | undefined)?.foundationProgress) { - (player.layers?.workshop as LayerData | undefined)!.foundationProgress = - Decimal.min( - (player.layers!.workshop as LayerData | undefined)! - .foundationProgress!, - 1000 - ); - } - /*player.offlineProd = false; - delete player.layers?.management; - if ((player.layers?.main as LayerData | undefined)?.days?.[11]) { - (player.layers!.main as LayerData).days![11].opened = false; - } - if ((player.layers?.main as LayerData | undefined)?.day === 12) { - (player.layers!.main as LayerData).day === 11; - player.devSpeed = 0; - } - if (player.tabs) { - player.tabs = player.tabs.filter(l => l !== "management"); - }*/ -} +): void {} /* eslint-enable @typescript-eslint/no-unused-vars */ From 3d4d43fa1594903d9b1dfba7d1bd550142a50859 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Tue, 20 Dec 2022 17:41:33 -0800 Subject: [PATCH 12/18] fix typo --- src/data/layers/toys.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index 97f87a8..82fcd05 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -335,7 +335,7 @@ const layer = createLayer(id, function (this: BaseLayer) { From 2e9c2e448788e415dd8385ff4eaf89d394e063da Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Tue, 20 Dec 2022 20:46:45 -0600 Subject: [PATCH 13/18] Skip black dye for ribbons cost --- src/data/layers/ribbon.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/data/layers/ribbon.tsx b/src/data/layers/ribbon.tsx index bc6a436..9874705 100644 --- a/src/data/layers/ribbon.tsx +++ b/src/data/layers/ribbon.tsx @@ -41,7 +41,10 @@ const layer = createLayer(id, () => { ) ); const currentDyeType = computed( - () => Object.values(dyes.dyes)[new Decimal(ribbon.value).toNumber() % 6] + () => + Object.values(dyes.dyes).filter(d => d !== dyes.dyes.black)[ + new Decimal(ribbon.value).toNumber() % 6 + ] ); const ribbonProgress = persistent(0); From 315a2ae00b0b57648f37a4467b7d6163f7f73365 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Wed, 21 Dec 2022 03:11:00 +0000 Subject: [PATCH 14/18] make wording about you have toys more clear --- src/data/layers/toys.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index 97f87a8..774a56f 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -356,7 +356,7 @@ const layer = createLayer(id, function (this: BaseLayer) { {renderGrid(row1Upgrades)} -
You have made {formatWhole(toySum.value)} total toys
+
You have {formatWhole(toySum.value)} toys
{milestonesDisplay()} )), From 198b49f48752bddfe322ae0a814ce70919527cec Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Wed, 21 Dec 2022 03:12:07 +0000 Subject: [PATCH 15/18] remove .value --- src/data/layers/oil.tsx | 2 +- src/data/layers/plastic.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/layers/oil.tsx b/src/data/layers/oil.tsx index 4b5f00c..e9bf0a5 100644 --- a/src/data/layers/oil.tsx +++ b/src/data/layers/oil.tsx @@ -956,7 +956,7 @@ const layer = createLayer(id, function (this: BaseLayer) { createMultiplicativeModifier(() => ({ multiplier: 50, description: "350 toys", - enabled: toys.milestones.milestone4.earned.value + enabled: toys.milestones.milestone4.earned })) ]) as WithRequired; const computedOilSpeed = computed(() => oilSpeed.apply(0)); diff --git a/src/data/layers/plastic.tsx b/src/data/layers/plastic.tsx index d8a070c..b79c0b7 100644 --- a/src/data/layers/plastic.tsx +++ b/src/data/layers/plastic.tsx @@ -378,7 +378,7 @@ const layer = createLayer(id, function (this: BaseLayer) { createMultiplicativeModifier(() => ({ multiplier: 50, description: "350 toys", - enabled: toys.milestones.milestone4.earned.value + enabled: toys.milestones.milestone4.earned })) ]); const computedPlasticGain = computed(() => plasticGain.apply(0)); From 0c0de62a831e7e6dfbe77dc458e57a82583e64db Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Tue, 20 Dec 2022 21:26:25 -0600 Subject: [PATCH 16/18] Add eslint rule for strict boolean expressions and fix linting issues --- .eslintrc.js | 12 ++++++++-- src/App.vue | 2 +- src/components/Info.vue | 2 +- src/components/Layer.vue | 9 +++----- src/components/Modal.vue | 4 ++-- src/components/NaNScreen.vue | 8 +++---- src/components/Options.vue | 2 +- src/components/Save.vue | 6 ++--- src/components/SavesManager.vue | 2 +- src/components/fields/Slider.vue | 2 +- src/components/fields/Text.vue | 2 +- src/components/fields/Toggle.vue | 2 +- src/components/math/Fraction.vue | 2 +- src/components/math/Sqrt.vue | 6 +++-- src/data/common.tsx | 20 ++++++++-------- src/data/projEntry.tsx | 4 ++-- src/features/achievements/achievement.tsx | 2 +- src/features/bars/bar.ts | 8 ++++++- src/features/boards/Board.vue | 2 +- src/features/boards/BoardNode.vue | 8 +++---- src/features/buyable.tsx | 28 ++++++++++++++--------- src/features/challenges/Challenge.vue | 8 +++---- src/features/challenges/challenge.tsx | 16 +++++++++---- src/features/clickables/Clickable.vue | 2 +- src/features/clickables/clickable.ts | 15 ++++++++---- src/features/conversion.ts | 17 ++++++++------ src/features/feature.ts | 4 ++-- src/features/milestones/Milestone.vue | 4 ++-- src/features/milestones/milestone.tsx | 15 +++++++++--- src/features/reset.ts | 2 +- src/features/trees/tree.ts | 4 ++-- src/features/upgrades/Upgrade.vue | 4 ++-- src/features/upgrades/upgrade.ts | 7 ++++-- src/game/modifiers.tsx | 6 ++--- src/game/persistence.ts | 6 ++--- src/game/player.ts | 2 +- src/game/settings.ts | 8 +++---- src/util/bignum.ts | 4 ++-- src/util/break_eternity.ts | 6 ++++- src/util/proxies.ts | 2 +- src/util/save.ts | 9 ++++++-- src/util/vue.tsx | 5 +++- 42 files changed, 168 insertions(+), 111 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2a1d0bc..a881f38 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -11,7 +11,8 @@ module.exports = { "@vue/eslint-config-prettier" ], parserOptions: { - ecmaVersion: 2020 + ecmaVersion: 2020, + project: "tsconfig.json" }, ignorePatterns: ["src/lib"], rules: { @@ -19,7 +20,14 @@ module.exports = { "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", "vue/script-setup-uses-vars": "warn", "vue/no-mutating-props": "off", - "vue/multi-word-component-names": "off" + "vue/multi-word-component-names": "off", + "@typescript-eslint/strict-boolean-expressions": [ + "error", + { + allowNullableObject: true, + allowNullableBoolean: true + } + ] }, globals: { defineProps: "readonly", diff --git a/src/App.vue b/src/App.vue index 560ce53..b661703 100644 --- a/src/App.vue +++ b/src/App.vue @@ -32,7 +32,7 @@ const theme = computed(() => themes[settings.theme].variables as CSSProperties); const showTPS = toRef(settings, "showTPS"); const gameComponent = computed(() => { - return coerceComponent(jsx(() => <>{gameComponents.map(render)})); + return coerceComponent(jsx(() => (<>{gameComponents.map(render)}))); }); diff --git a/src/components/Info.vue b/src/components/Info.vue index 1d7cef9..939dd4e 100644 --- a/src/components/Info.vue +++ b/src/components/Info.vue @@ -80,7 +80,7 @@ const isOpen = ref(false); const timePlayed = computed(() => formatTime(player.timePlayed)); const infoComponent = computed(() => { - return coerceComponent(jsx(() => <>{infoComponents.map(render)})); + return coerceComponent(jsx(() => (<>{infoComponents.map(render)}))); }); defineExpose({ diff --git a/src/components/Layer.vue b/src/components/Layer.vue index 8c055bd..e6300f8 100644 --- a/src/components/Layer.vue +++ b/src/components/Layer.vue @@ -12,9 +12,7 @@ - + @@ -114,7 +112,6 @@ export default defineComponent({ } } - return { component, minimizedComponent, @@ -124,7 +121,7 @@ export default defineComponent({ goBack, setMinimized, minimized, - minWidth, + minWidth }; } }); @@ -237,7 +234,7 @@ export default defineComponent({ text-shadow: 0 0 7px var(--foreground); } - \ No newline at end of file + diff --git a/src/components/math/Sqrt.vue b/src/components/math/Sqrt.vue index 6dce0de..461846f 100644 --- a/src/components/math/Sqrt.vue +++ b/src/components/math/Sqrt.vue @@ -1,6 +1,8 @@ diff --git a/src/data/common.tsx b/src/data/common.tsx index 5074730..869414b 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -1,4 +1,5 @@ import Collapsible from "components/layout/Collapsible.vue"; +import "data/layers/styles/day-gradients.css"; import { createBar } from "features/bars/bar"; import { GenericBuyable } from "features/buyable"; import type { Clickable, ClickableOptions, GenericClickable } from "features/clickables/clickable"; @@ -16,14 +17,12 @@ import { GenericMilestone } from "features/milestones/milestone"; import { displayResource, Resource, trackTotal } from "features/resources/resource"; import type { GenericTree, GenericTreeNode, TreeNode, TreeNodeOptions } from "features/trees/tree"; import { createTreeNode } from "features/trees/tree"; -import { BaseLayer, Layer } from "game/layers"; import type { Modifier } from "game/modifiers"; import type { Persistent } from "game/persistence"; import { DefaultValue, persistent } from "game/persistence"; import player from "game/player"; import settings from "game/settings"; -import { DecimalSource, formatSmall } from "util/bignum"; -import Decimal, { format } from "util/bignum"; +import Decimal, { DecimalSource, format, formatSmall } from "util/bignum"; import { formatWhole } from "util/break_eternity"; import { Direction, WithRequired } from "util/common"; import type { @@ -34,10 +33,8 @@ import type { } from "util/computed"; import { convertComputable, processComputable } from "util/computed"; import { getFirstFeature, render, renderColJSX, renderJSX, VueFeature } from "util/vue"; -import { Ref, watchEffect } from "vue"; -import { computed, unref } from "vue"; +import { computed, Ref, unref, watchEffect } from "vue"; import "./common.css"; -import "data/layers/styles/day-gradients.css"; import { main } from "./projEntry"; /** An object that configures a {@link ResetButton} */ @@ -138,7 +135,7 @@ export function createResetButton{" "} {resetButton.conversion.gainResource.displayName} - {unref(resetButton.showNextAt) ? ( + {unref(resetButton.showNextAt) != null ? (

{unref(resetButton.conversion.buyMax) ? "Next:" : "Req:"}{" "} @@ -167,7 +164,7 @@ export function createResetButton {s.title} - {s.subtitle ? ({s.subtitle}) : null} + {s.subtitle != null ? ({s.subtitle}) : null} ); @@ -338,7 +335,8 @@ export function createCollapsibleModifierSections( {hasPreviousSection ?
: null}
{header} @@ -455,7 +453,7 @@ export function setUpDailyProgressTracker(options: { animation: options.background.duration + " " + options.background.gradient + " linear infinite", }, /* eslint-enable prettier/prettier */ - textStyle: options.textColor ? { color: options.textColor } : undefined, + textStyle: options.textColor != null ? { color: options.textColor } : undefined, progress: progressFunc, display: jsx(() => main.day.value === options.day || diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index 7b2ac9e..efe1bb0 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -539,10 +539,10 @@ export const main = createLayer("main", function (this: BaseLayer) { display: jsx(() => ( <> {player.devSpeed === 0 ?
Game Paused
: null} - {player.devSpeed && player.devSpeed !== 1 ? ( + {player.devSpeed != null && player.devSpeed !== 1 ? (
Dev Speed: {format(player.devSpeed)}x
) : null} - {player.offlineTime ? ( + {player.offlineTime != null && player.offlineTime !== 0 ? (
Offline Time: {formatTime(player.offlineTime)}
) : null} diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index 8bebb55..92e9e88 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -109,7 +109,7 @@ export function createAchievement( ) { genericAchievement.earned.value = true; genericAchievement.onComplete?.(); - if (genericAchievement.display) { + if (genericAchievement.display != null) { const Display = coerceComponent(unref(genericAchievement.display)); toast.info(
diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index 1eca337..a77fcb8 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -1,5 +1,11 @@ import BarComponent from "features/bars/Bar.vue"; -import type { CoercableComponent, GenericComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; +import type { + CoercableComponent, + GenericComponent, + OptionsFunc, + Replace, + StyleValue +} from "features/feature"; import { Component, GatherProps, getUniqueID, setDefault, Visibility } from "features/feature"; import type { DecimalSource } from "util/bignum"; import { Direction } from "util/common"; diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index c7e7d9d..221ed4a 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -210,7 +210,7 @@ function drag(e: MouseEvent | TouchEvent) { hasDragged.value = true; } - if (dragging.value) { + if (dragging.value != null) { e.preventDefault(); e.stopPropagation(); } diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index e46fb32..a153afd 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -234,17 +234,17 @@ const title = computed(() => getNodeProperty(props.nodeType.value.title, unref(p const label = computed(() => getNodeProperty(props.nodeType.value.label, unref(props.node))); const size = computed(() => getNodeProperty(props.nodeType.value.size, unref(props.node))); const progress = computed( - () => getNodeProperty(props.nodeType.value.progress, unref(props.node)) || 0 + () => getNodeProperty(props.nodeType.value.progress, unref(props.node)) ?? 0 ); const backgroundColor = computed(() => themes[settings.theme].variables["--background"]); const outlineColor = computed( () => - getNodeProperty(props.nodeType.value.outlineColor, unref(props.node)) || + getNodeProperty(props.nodeType.value.outlineColor, unref(props.node)) ?? themes[settings.theme].variables["--outline"] ); const fillColor = computed( () => - getNodeProperty(props.nodeType.value.fillColor, unref(props.node)) || + getNodeProperty(props.nodeType.value.fillColor, unref(props.node)) ?? themes[settings.theme].variables["--raised-background"] ); const progressColor = computed(() => @@ -252,7 +252,7 @@ const progressColor = computed(() => ); const titleColor = computed( () => - getNodeProperty(props.nodeType.value.titleColor, unref(props.node)) || + getNodeProperty(props.nodeType.value.titleColor, unref(props.node)) ?? themes[settings.theme].variables["--foreground"] ); const progressDisplay = computed(() => diff --git a/src/features/buyable.tsx b/src/features/buyable.tsx index b3d3737..c426274 100644 --- a/src/features/buyable.tsx +++ b/src/features/buyable.tsx @@ -1,5 +1,11 @@ import ClickableComponent from "features/clickables/Clickable.vue"; -import type { CoercableComponent, GenericComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; +import type { + CoercableComponent, + GenericComponent, + OptionsFunc, + Replace, + StyleValue +} from "features/feature"; import { Component, GatherProps, getUniqueID, jsx, setDefault, Visibility } from "features/feature"; import type { Resource } from "features/resources/resource"; import { DefaultValue, Persistent } from "game/persistence"; @@ -170,18 +176,18 @@ export function createBuyable( } if (currDisplay != null && buyable.cost != null && buyable.resource != null) { const genericBuyable = buyable as GenericBuyable; - const Title = coerceComponent(currDisplay.title || "", "h3"); - const Description = coerceComponent(currDisplay.description || ""); - const EffectDisplay = coerceComponent(currDisplay.effectDisplay || ""); + const Title = coerceComponent(currDisplay.title ?? "", "h3"); + const Description = coerceComponent(currDisplay.description ?? ""); + const EffectDisplay = coerceComponent(currDisplay.effectDisplay ?? ""); return ( - {currDisplay.title ? ( + {currDisplay.title == null ? null : (
</div> - ) : null} - {currDisplay.description ? <Description /> : null} + )} + {currDisplay.description == null ? null : <Description />} {currDisplay.showAmount === false ? null : ( <div> <br /> @@ -195,15 +201,15 @@ export function createBuyable<T extends BuyableOptions>( )} </div> )} - {currDisplay.effectDisplay ? ( + {currDisplay.effectDisplay == null ? null : ( <div> <br /> Currently: <EffectDisplay /> </div> - ) : null} - {genericBuyable.cost && !genericBuyable.maxed.value ? ( + )} + {genericBuyable.cost != null && !genericBuyable.maxed.value ? ( <div> - Cost: {format(unref(genericBuyable.cost) || 0)}{" "} + Cost: {format(unref(genericBuyable.cost))}{" "} {buyable.resource.displayName} </div> ) : null} diff --git a/src/features/challenges/Challenge.vue b/src/features/challenges/Challenge.vue index e387c18..f68d9cf 100644 --- a/src/features/challenges/Challenge.vue +++ b/src/features/challenges/Challenge.vue @@ -134,25 +134,25 @@ export default defineComponent({ comp.value = coerceComponent( jsx(() => ( <span> - {currDisplay.title ? ( + {currDisplay.title != null ? ( <div> <Title /> </div> ) : null} <Description /> - {currDisplay.goal ? ( + {currDisplay.goal != null ? ( <div> <br /> Goal: <Goal /> </div> ) : null} - {currDisplay.reward ? ( + {currDisplay.reward != null ? ( <div> <br /> Reward: <Reward /> </div> ) : null} - {currDisplay.effectDisplay ? ( + {currDisplay.effectDisplay != null ? ( <div> Currently: <EffectDisplay /> </div> diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index 8128ab2..be3d90b 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -126,7 +126,10 @@ export function createChallenge<T extends ChallengeOptions>( challenge.toggle = function () { const genericChallenge = challenge as GenericChallenge; if (genericChallenge.active.value) { - if (unref(genericChallenge.canComplete) && !genericChallenge.maxed.value) { + if ( + unref(genericChallenge.canComplete) !== false && + !genericChallenge.maxed.value + ) { let completions: boolean | DecimalSource = unref(genericChallenge.canComplete); if (typeof completions === "boolean") { completions = 1; @@ -264,11 +267,14 @@ export function setupAutoComplete( exitOnComplete = true ): WatchStopHandle { const isActive = typeof autoActive === "function" ? computed(autoActive) : autoActive; - return watch([challenge.canComplete, isActive], ([canComplete, isActive]) => { - if (canComplete && isActive) { - challenge.complete(!exitOnComplete); + return watch( + [challenge.canComplete as Ref<boolean>, isActive as Ref<boolean>], + ([canComplete, isActive]) => { + if (canComplete && isActive) { + challenge.complete(!exitOnComplete); + } } - }); + ); } export function createActiveChallenge( diff --git a/src/features/clickables/Clickable.vue b/src/features/clickables/Clickable.vue index acbc804..c51c510 100644 --- a/src/features/clickables/Clickable.vue +++ b/src/features/clickables/Clickable.vue @@ -98,7 +98,7 @@ export default defineComponent({ comp.value = coerceComponent( jsx(() => ( <span> - {currDisplay.title ? ( + {currDisplay.title != null ? ( <div> <Title /> </div> diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index 7222982..68035c4 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -1,5 +1,11 @@ import ClickableComponent from "features/clickables/Clickable.vue"; -import type { CoercableComponent, GenericComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; +import type { + CoercableComponent, + GenericComponent, + OptionsFunc, + Replace, + StyleValue +} from "features/feature"; import { Component, GatherProps, getUniqueID, setDefault, Visibility } from "features/feature"; import type { BaseLayer } from "game/layers"; import type { Unsubscribe } from "nanoevents"; @@ -84,7 +90,7 @@ export function createClickable<T extends ClickableOptions>( if (clickable.onClick) { const onClick = clickable.onClick.bind(clickable); clickable.onClick = function (e) { - if (unref(clickable.canClick)) { + if (unref(clickable.canClick) !== false) { onClick(e); } }; @@ -92,7 +98,7 @@ export function createClickable<T extends ClickableOptions>( if (clickable.onHold) { const onHold = clickable.onHold.bind(clickable); clickable.onHold = function () { - if (unref(clickable.canClick)) { + if (unref(clickable.canClick) !== false) { onHold(); } }; @@ -136,7 +142,8 @@ export function setupAutoClick( clickable: GenericClickable, autoActive: Computable<boolean> = true ): Unsubscribe { - const isActive = typeof autoActive === "function" ? computed(autoActive) : autoActive; + const isActive: ProcessedComputable<boolean> = + typeof autoActive === "function" ? computed(autoActive) : autoActive; return layer.on("update", () => { if (unref(isActive) && unref(clickable.canClick)) { clickable.onClick?.(); diff --git a/src/features/conversion.ts b/src/features/conversion.ts index 6c95c1e..a7f18d0 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -151,7 +151,7 @@ export function createConversion<T extends ConversionOptions>( : conversion.scaling.currentGain(conversion as GenericConversion); gain = Decimal.floor(gain).max(0); - if (!unref(conversion.buyMax)) { + if (unref(conversion.buyMax) === false) { gain = gain.min(1); } return gain; @@ -163,14 +163,15 @@ export function createConversion<T extends ConversionOptions>( if (conversion.currentAt == null) { conversion.currentAt = computed(() => { let current = conversion.scaling.currentAt(conversion as GenericConversion); - if (conversion.roundUpCost) current = Decimal.ceil(current); + if (unref((conversion as GenericConversion).roundUpCost)) + current = Decimal.ceil(current); return current; }); } if (conversion.nextAt == null) { conversion.nextAt = computed(() => { let next = conversion.scaling.nextAt(conversion as GenericConversion); - if (conversion.roundUpCost) next = Decimal.ceil(next); + if (unref((conversion as GenericConversion).roundUpCost)) next = Decimal.ceil(next); return next; }); } @@ -405,7 +406,7 @@ export function createIndependentConversion<S extends ConversionOptions>( : conversion.scaling.currentGain(conversion as GenericConversion); gain = Decimal.floor(gain).max(conversion.gainResource.value); - if (!unref(conversion.buyMax)) { + if (unref(conversion.buyMax) === false) { gain = gain.min(Decimal.add(conversion.gainResource.value, 1)); } return gain; @@ -418,7 +419,7 @@ export function createIndependentConversion<S extends ConversionOptions>( conversion.gainResource.value ).max(0); - if (!unref(conversion.buyMax)) { + if (unref(conversion.buyMax) === false) { gain = gain.min(1); } return gain; @@ -511,8 +512,10 @@ export function addSoftcap( ): ScalingFunction { return { ...scaling, - currentAt: conversion => softcap(scaling.currentAt(conversion), unref(cap), Decimal.recip(unref(power))), - nextAt: conversion => softcap(scaling.nextAt(conversion), unref(cap), Decimal.recip(unref(power))), + currentAt: conversion => + softcap(scaling.currentAt(conversion), unref(cap), Decimal.recip(unref(power))), + nextAt: conversion => + softcap(scaling.nextAt(conversion), unref(cap), Decimal.recip(unref(power))), currentGain: conversion => softcap(scaling.currentGain(conversion), unref(cap), unref(power)) }; diff --git a/src/features/feature.ts b/src/features/feature.ts index ae14e29..afa251f 100644 --- a/src/features/feature.ts +++ b/src/features/feature.ts @@ -102,7 +102,7 @@ export function findFeatures(obj: Record<string, unknown>, ...types: symbol[]): const handleObject = (obj: Record<string, unknown>) => { Object.keys(obj).forEach(key => { const value = obj[key]; - if (value && typeof value === "object") { + if (value != null && typeof value === "object") { // eslint-disable-next-line @typescript-eslint/no-explicit-any if (types.includes((value as Record<string, any>).type)) { objects.push(value); @@ -127,7 +127,7 @@ export function excludeFeatures(obj: Record<string, unknown>, ...types: symbol[] const handleObject = (obj: Record<string, unknown>) => { Object.keys(obj).forEach(key => { const value = obj[key]; - if (value && typeof value === "object") { + if (value != null && typeof value === "object") { if ( // eslint-disable-next-line @typescript-eslint/no-explicit-any typeof (value as Record<string, any>).type == "symbol" && diff --git a/src/features/milestones/Milestone.vue b/src/features/milestones/Milestone.vue index 92a90d6..8cc4331 100644 --- a/src/features/milestones/Milestone.vue +++ b/src/features/milestones/Milestone.vue @@ -74,12 +74,12 @@ export default defineComponent({ jsx(() => ( <span> <Requirement /> - {currDisplay.effectDisplay ? ( + {currDisplay.effectDisplay != null ? ( <div> <EffectDisplay /> </div> ) : null} - {currDisplay.optionsDisplay ? ( + {currDisplay.optionsDisplay != null ? ( <div class="equal-spaced"> <OptionsDisplay /> </div> diff --git a/src/features/milestones/milestone.tsx b/src/features/milestones/milestone.tsx index e016e64..cb3e7c4 100644 --- a/src/features/milestones/milestone.tsx +++ b/src/features/milestones/milestone.tsx @@ -1,5 +1,11 @@ import Select from "components/fields/Select.vue"; -import type { CoercableComponent, GenericComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; +import type { + CoercableComponent, + GenericComponent, + OptionsFunc, + Replace, + StyleValue +} from "features/feature"; import { Component, GatherProps, getUniqueID, jsx, setDefault, Visibility } from "features/feature"; import MilestoneComponent from "features/milestones/Milestone.vue"; import { globalBus } from "game/events"; @@ -92,7 +98,7 @@ export function createMilestone<T extends MilestoneOptions>( const genericMilestone = milestone as GenericMilestone; earned.value = true; genericMilestone.onComplete?.(); - if (genericMilestone.display && unref(genericMilestone.showPopups) === true) { + if (genericMilestone.display != null && unref(genericMilestone.showPopups) === true) { const display = unref(genericMilestone.display); const Display = coerceComponent( isCoercableComponent(display) ? display : display.requirement @@ -162,7 +168,10 @@ export function createMilestone<T extends MilestoneOptions>( ) { genericMilestone.earned.value = true; genericMilestone.onComplete?.(); - if (genericMilestone.display && unref(genericMilestone.showPopups) === true) { + if ( + genericMilestone.display != null && + unref(genericMilestone.showPopups) === true + ) { const display = unref(genericMilestone.display); const Display = coerceComponent( isCoercableComponent(display) ? display : display.requirement diff --git a/src/features/reset.ts b/src/features/reset.ts index 92cb506..487238c 100644 --- a/src/features/reset.ts +++ b/src/features/reset.ts @@ -43,7 +43,7 @@ export function createReset<T extends ResetOptions>( reset.reset = function () { const handleObject = (obj: unknown) => { - if (obj && typeof obj === "object") { + if (obj != null && typeof obj === "object") { if (DefaultValue in obj) { const persistent = obj as NonPersistent; persistent.value = persistent[DefaultValue]; diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index 3fbf935..0b36f74 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -88,7 +88,7 @@ export function createTreeNode<T extends TreeNodeOptions>( if (treeNode.onClick) { const onClick = treeNode.onClick.bind(treeNode); treeNode.onClick = function () { - if (unref(treeNode.canClick)) { + if (unref(treeNode.canClick) !== false) { onClick(); } }; @@ -96,7 +96,7 @@ export function createTreeNode<T extends TreeNodeOptions>( if (treeNode.onHold) { const onHold = treeNode.onHold.bind(treeNode); treeNode.onHold = function () { - if (unref(treeNode.canClick)) { + if (unref(treeNode.canClick) !== false) { onHold(); } }; diff --git a/src/features/upgrades/Upgrade.vue b/src/features/upgrades/Upgrade.vue index dce37be..9723f44 100644 --- a/src/features/upgrades/Upgrade.vue +++ b/src/features/upgrades/Upgrade.vue @@ -96,13 +96,13 @@ export default defineComponent({ component.value = coerceComponent( jsx(() => ( <span> - {currDisplay.title ? ( + {currDisplay.title != null ? ( <div> <Title /> </div> ) : null} <Description /> - {currDisplay.effectDisplay ? ( + {currDisplay.effectDisplay != null ? ( <div> Currently: <EffectDisplay /> </div> diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index d60d9ea..1eb1d56 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -187,8 +187,11 @@ export function setupAutoPurchase( autoActive: Computable<boolean>, upgrades: GenericUpgrade[] = [] ): void { - upgrades = upgrades || findFeatures(layer, UpgradeType); - const isAutoActive = isFunction(autoActive) ? computed(autoActive) : autoActive; + upgrades = + upgrades.length === 0 ? (findFeatures(layer, UpgradeType) as GenericUpgrade[]) : upgrades; + const isAutoActive: ProcessedComputable<boolean> = isFunction(autoActive) + ? computed(autoActive) + : autoActive; layer.on("update", () => { if (unref(isAutoActive)) { upgrades.forEach(upgrade => upgrade.purchase()); diff --git a/src/game/modifiers.tsx b/src/game/modifiers.tsx index a5cd416..4606671 100644 --- a/src/game/modifiers.tsx +++ b/src/game/modifiers.tsx @@ -78,7 +78,7 @@ export function createAdditiveModifier<T extends AdditiveModifierOptions>( ? undefined : jsx(() => ( <div class="modifier-container"> - {unref(processedDescription) ? ( + {unref(processedDescription) != null ? ( <span class="modifier-description"> {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */} {renderJSX(unref(processedDescription)!)} @@ -126,7 +126,7 @@ export function createMultiplicativeModifier<T extends MultiplicativeModifierOpt ? undefined : jsx(() => ( <div class="modifier-container"> - {unref(processedDescription) ? ( + {unref(processedDescription) != null ? ( <span class="modifier-description"> {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */} {renderJSX(unref(processedDescription)!)} @@ -195,7 +195,7 @@ export function createExponentialModifier<T extends ExponentialModifierOptions>( ? undefined : jsx(() => ( <div class="modifier-container"> - {unref(processedDescription) ? ( + {unref(processedDescription) != null ? ( <span class="modifier-description"> {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */} {renderJSX(unref(processedDescription)!)} diff --git a/src/game/persistence.ts b/src/game/persistence.ts index 03f5dad..893d435 100644 --- a/src/game/persistence.ts +++ b/src/game/persistence.ts @@ -85,7 +85,7 @@ function getStackTrace() { ?.split("\n") .slice(3, 5) .map(line => line.trim()) - .join("\n") || "" + .join("\n") ?? "" ); } @@ -134,7 +134,7 @@ export function persistent<T extends State>(defaultValue: T | Ref<T>): Persisten */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function isPersistent(value: any): value is Persistent { - return value && typeof value === "object" && PersistentState in value; + return value != null && typeof value === "object" && PersistentState in value; } /** @@ -168,7 +168,7 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> let foundPersistent = false; Object.keys(obj).forEach(key => { let value = obj[key]; - if (value && typeof value === "object") { + if (value != null && typeof value === "object") { if (ProxyState in value) { // eslint-disable-next-line @typescript-eslint/no-explicit-any value = (value as any)[ProxyState] as object; diff --git a/src/game/player.ts b/src/game/player.ts index e641904..3280caf 100644 --- a/src/game/player.ts +++ b/src/game/player.ts @@ -70,7 +70,7 @@ const state = reactive<PlayerData>({ modVersion: "", layers: {}, - autoPause: true, + autoPause: true }); /** Convert a player save data object into a JSON string. Unwraps refs. */ diff --git a/src/game/settings.ts b/src/game/settings.ts index a82c8a5..9595343 100644 --- a/src/game/settings.ts +++ b/src/game/settings.ts @@ -33,9 +33,9 @@ const state = reactive<Partial<Settings>>({ showTPS: true, theme: Themes.Nordic, unthrottled: false, - + usingLog: false, - alignUnits: false, + alignUnits: false }); watch( @@ -68,9 +68,9 @@ export const hardResetSettings = (window.hardResetSettings = () => { saves: [], showTPS: true, theme: Themes.Nordic, - + usingLog: false, - alignUnits: false, + alignUnits: false }; globalBus.emit("loadSettings", settings); Object.assign(state, settings); diff --git a/src/util/bignum.ts b/src/util/bignum.ts index 3c368d9..64bbeb2 100644 --- a/src/util/bignum.ts +++ b/src/util/bignum.ts @@ -33,7 +33,7 @@ declare global { formatSmall: (x: DecimalSource, precision?: number) => string; formatLimit: (list: [DecimalSource, string][], unit: string) => string; invertOOM: (x: DecimalSource) => Decimal; - formatGain: (x: DecimalSource) => string + formatGain: (x: DecimalSource) => string; } } window.Decimal = Decimal; @@ -47,6 +47,6 @@ window.toPlaces = toPlaces; window.formatSmall = formatSmall; window.formatLimit = formatLimit; window.invertOOM = invertOOM; -window.formatGain = formatGain +window.formatGain = formatGain; export default Decimal; diff --git a/src/util/break_eternity.ts b/src/util/break_eternity.ts index a794464..a3fc5aa 100644 --- a/src/util/break_eternity.ts +++ b/src/util/break_eternity.ts @@ -196,7 +196,11 @@ export function invertOOM(x: DecimalSource): Decimal { return x; } -export function formatLimit(list: [DecimalSource, string][], unit: string, gainMultiplier: DecimalSource = Decimal.dOne): string { +export function formatLimit( + list: [DecimalSource, string][], + unit: string, + gainMultiplier: DecimalSource = Decimal.dOne +): string { let num = list[0][0]; let str = list[0][1]; for (let i = 1; i < list.length; i++) { diff --git a/src/util/proxies.ts b/src/util/proxies.ts index a855dee..9dad138 100644 --- a/src/util/proxies.ts +++ b/src/util/proxies.ts @@ -39,7 +39,7 @@ export function createLazyProxy<T extends object, S extends T>( } // eslint-disable-next-line @typescript-eslint/no-explicit-any const val = (calculateObj() as any)[key]; - if (val && typeof val === "object" && NonPersistent in val) { + if (val != null && typeof val === "object" && NonPersistent in val) { return val[NonPersistent]; } return val; diff --git a/src/util/save.ts b/src/util/save.ts index 8ddddad..31fb837 100644 --- a/src/util/save.ts +++ b/src/util/save.ts @@ -86,7 +86,7 @@ export function getUniqueID(): string { i = 0; do { id = `${projInfo.id}-${i++}`; - } while (localStorage.getItem(id)); + } while (localStorage.getItem(id) != null); return id; } @@ -107,7 +107,12 @@ export async function loadSave(playerObj: Partial<PlayerData>): Promise<void> { getInitialLayers(playerObj).forEach(layer => addLayer(layer, playerObj)); playerObj = setupInitialStore(playerObj); - if (playerObj.offlineProd && playerObj.time && playerObj.devSpeed !== 0) { + if ( + playerObj.offlineProd && + playerObj.time != null && + playerObj.time && + playerObj.devSpeed !== 0 + ) { if (playerObj.offlineTime == undefined) playerObj.offlineTime = 0; playerObj.offlineTime += Math.min( playerObj.offlineTime + (Date.now() - playerObj.time) / 1000, diff --git a/src/util/vue.tsx b/src/util/vue.tsx index 750672f..089b465 100644 --- a/src/util/vue.tsx +++ b/src/util/vue.tsx @@ -229,7 +229,10 @@ export function computeOptionalComponent( const comp = shallowRef<Component | "" | null>(null); watchEffect(() => { const currComponent = unwrapRef(component); - comp.value = !currComponent ? null : coerceComponent(currComponent, defaultWrapper); + comp.value = + currComponent == "" || currComponent == null + ? null + : coerceComponent(currComponent, defaultWrapper); }); return comp; } From 850ccdbd5f13d130d85cfb9694fce0af5516e406 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 20 Dec 2022 21:27:22 -0600 Subject: [PATCH 17/18] Cleaned up --- src/data/Day.vue | 15 +++++++-------- src/data/layers/trees.tsx | 2 +- src/data/layers/workshop.tsx | 2 +- src/data/layers/wrapping-paper.tsx | 5 ++++- src/data/projEntry.tsx | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/data/Day.vue b/src/data/Day.vue index 21389ce..a63ccc3 100644 --- a/src/data/Day.vue +++ b/src/data/Day.vue @@ -48,16 +48,15 @@ <script setup lang="ts"> import Notif from "components/Notif.vue"; import Tooltip from "features/tooltips/Tooltip.vue"; -import Decimal from "util/bignum"; import { layers } from "game/layers"; -import { Direction } from "util/common"; +import Decimal from "util/bignum"; import { formatTime } from "util/break_eternity"; +import { Direction } from "util/common"; import { ProcessedComputable } from "util/computed"; -import { Ref, Transition } from "vue"; -import { computed, unref } from "vue"; -import { main } from "./projEntry"; +import { computed, Ref, Transition, unref } from "vue"; import coal from "./layers/coal"; import dyes from "./layers/dyes"; +import { main } from "./projEntry"; const props = defineProps<{ day: number; @@ -77,7 +76,7 @@ const emit = defineEmits<{ const canOpen = computed( () => - props.layer && + props.layer != null && Decimal.gte(main.day.value, props.day) && new Date().getMonth() === 11 && new Date().getDate() >= props.day @@ -88,14 +87,14 @@ const includeMastery = computed( () => props.mastered.value || main.currentlyMastering.value == layers[props.layer ?? ""] || - ["wrappingPaper", "ribbon"].includes(props.layer || "") || + ["wrappingPaper", "ribbon"].includes(props.layer ?? "") || (coal.mastered.value && props.layer == "elves") || (dyes.mastered.value && props.layer == "elves") ); const masteryLock = computed(() => isMastering.value && !includeMastery.value); function tryUnlock() { - if (canOpen.value) { + if (canOpen.value === true) { emit("unlockLayer"); } } diff --git a/src/data/layers/trees.tsx b/src/data/layers/trees.tsx index 8bc2497..8bc93e2 100644 --- a/src/data/layers/trees.tsx +++ b/src/data/layers/trees.tsx @@ -404,7 +404,7 @@ const layer = createLayer(id, function (this: BaseLayer) { createAdditiveModifier(() => ({ addend: 1, description: "Automated Spade", - enabled: autoPlantUpgrade1.bought.value + enabled: autoPlantUpgrade1.bought })), createAdditiveModifier(() => ({ addend: () => Decimal.div(autoPlantingBuyable1.amount.value, 2), diff --git a/src/data/layers/workshop.tsx b/src/data/layers/workshop.tsx index 1b6ea38..6bc112e 100644 --- a/src/data/layers/workshop.tsx +++ b/src/data/layers/workshop.tsx @@ -49,7 +49,7 @@ const layer = createLayer(id, function (this: BaseLayer) { scaling: addHardcap( addSoftcap(addSoftcap(createPolynomialScaling(250, 1.5), 5423, 1 / 1e10), 1e20, 3e8), computed(() => - toys.row1Upgrades[2].bought + toys.row1Upgrades[2].bought.value ? 1200 : management.elfTraining.expandersElfTraining.milestones[2].earned.value ? 1000 diff --git a/src/data/layers/wrapping-paper.tsx b/src/data/layers/wrapping-paper.tsx index 9c30853..5aa998c 100644 --- a/src/data/layers/wrapping-paper.tsx +++ b/src/data/layers/wrapping-paper.tsx @@ -278,7 +278,10 @@ const layer = createLayer(id, () => { beach1: computed(() => main.isMastery.value ? 1 - : Decimal.add(wrappingPaper.beach.buyable.amount.value, 1).log10().add(1).pow(toys.milestones.milestone3.earned.value ? 1.6 : 1) + : Decimal.add(wrappingPaper.beach.buyable.amount.value, 1) + .log10() + .add(1) + .pow(toys.milestones.milestone3.earned.value ? 1.6 : 1) ) }; const wrappingPaperSum = createResource( diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index efe1bb0..4ba7193 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -224,7 +224,7 @@ export const main = createLayer("main", function (this: BaseLayer) { openDay(layer ?? "trees"); }, onUnlockLayer() { - if (layer) { + if (layer != null) { opened.value = true; setTimeout(() => { loreScene.value = -1; From cb3b66bdb7aa059f6cd48ce17dc42bf1f77443d5 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 20 Dec 2022 21:40:55 -0600 Subject: [PATCH 18/18] Fixed workshop display --- src/data/layers/workshop.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/data/layers/workshop.tsx b/src/data/layers/workshop.tsx index 6bc112e..042c20e 100644 --- a/src/data/layers/workshop.tsx +++ b/src/data/layers/workshop.tsx @@ -99,12 +99,7 @@ const layer = createLayer(id, function (this: BaseLayer) { <br /> <span style="font-size: large"> {masteryEffectActive.value ? "Requirement" : "Cost"}:{" "} - {displayResource( - trees.logs, - Decimal.gte(foundationConversion.actualGain.value, 1) - ? foundationConversion.currentAt.value - : foundationConversion.nextAt.value - )}{" "} + {displayResource(trees.logs, foundationConversion.nextAt.value)}{" "} {trees.logs.displayName} </span> </>