diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..8c832f5d
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,14 @@
+root = true
+
+[*]
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+end_of_line = lf
+
+[{*.js,*.html}]
+end_of_line = crlf
+
+[package.json]
+indent_size = 2
diff --git a/.gitignore b/.gitignore
index 3809d123..77cb8737 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
_config.yml
-app.manifest
-web.config
\ No newline at end of file
+web.config
+.idea
+node_modules
diff --git a/README.md b/README.md
index 91e3ef6e..230f8942 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,25 @@
# Gloomy Companion
+## About the fork
+
+I want to add the following features:
+
+1. Sort monster decks by initiative.
+2. Sort player icons in between the monster decks.
+
+In the process I ended up implementing webpack and ES6 and fixing small bugs.
+
+## Original intro
+
This is a web-app for managing the monster ability decks in the board game [Gloomhaven](https://boardgamegeek.com/boardgame/174430/gloomhaven)
You can run it from the web directly on .
You can also download it and run it locally without internet connection. Click __Clone or download__ above, then __Download ZIP__. Unpack the ZIP and start the app by opening `index.html`.
-If you want to add new cards, you need to update [`cards.js`](cards.js). The decks has the following syntax:
+If you want to add new cards, you need to update [`cards.js`](src/cards.js). The decks have the following syntax:
-```json
+```javascript
{ name: "Name of monster"
, cards:
[ [false, "42", "* First line", "** sub-line 1", "** sub-line 2", "* Second line"]
@@ -19,11 +30,15 @@ If you want to add new cards, you need to update [`cards.js`](cards.js). The dec
The value in the first column is `true` if the deck shall be reshuffled after that card, `false` otherwise. The second colum is card initiative value. The following values is the card text, one row per column.
-A single `*` means a top-level action. Double asterisk `**` means it modifies the previous action. Commonly used text snippets can be expanded using macros. E.g. `%move%` expands to the text _Move_ followed by the move icon, `%immobilize%` expands to _IMMOBILIZE_ followed by the immobilization icon. The list of available macros can be seen in [`macros.js`](macros.js).
+A single `*` means a top-level action. Double asterisk `**` means it modifies the previous action. Commonly used text snippets can be expanded using macros. E.g. `%move%` expands to the text _Move_ followed by the move icon, `%immobilize%` expands to _IMMOBILIZE_ followed by the immobilization icon. The list of available macros can be seen in [`macros.js`](src/macros.js).
## Development
* Clone the repository
-* Run the [`gen-manifest.sh`](gen-manifest.sh) script (Linux and MacOS only; you'll have to make the `app.manifest` by hand if you are running Windows)
+* `npm install`
+* `npm run dev-server`
+
+## PWA Development and Testing
-Any time a source/asset file is added or removed, re-run the above manifest generation script. Or manually make the appropriate change to the manifest instead.
+1. `npm run http-server`
+2. Browse to http://localhost:8080 and use Chrome developer tools for auditing and debugging.
diff --git a/app.webmanifest b/app.webmanifest
deleted file mode 100644
index 1687628c..00000000
--- a/app.webmanifest
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "start_url": "index.html",
- "display": "standalone",
- "icons": [
- {
- "src": "images/icon.png",
- "sizes": "192x192",
- "type": "image/png"
- }
- ]
-}
-
diff --git a/Philosopher-Bold.ttf b/dist/Philosopher-Bold.ttf
similarity index 100%
rename from Philosopher-Bold.ttf
rename to dist/Philosopher-Bold.ttf
diff --git a/PirataOne-Gloomhaven.ttf b/dist/PirataOne-Gloomhaven.ttf
similarity index 100%
rename from PirataOne-Gloomhaven.ttf
rename to dist/PirataOne-Gloomhaven.ttf
diff --git a/cards.css b/dist/cards.css
similarity index 100%
rename from cards.css
rename to dist/cards.css
diff --git a/images/add_target.svg b/dist/images/add_target.svg
similarity index 100%
rename from images/add_target.svg
rename to dist/images/add_target.svg
diff --git a/images/air.svg b/dist/images/air.svg
similarity index 100%
rename from images/air.svg
rename to dist/images/air.svg
diff --git a/images/any_element.svg b/dist/images/any_element.svg
similarity index 100%
rename from images/any_element.svg
rename to dist/images/any_element.svg
diff --git a/images/aoe-4-with-black.svg b/dist/images/aoe-4-with-black.svg
similarity index 100%
rename from images/aoe-4-with-black.svg
rename to dist/images/aoe-4-with-black.svg
diff --git a/images/aoe-circle-with-middle-black.svg b/dist/images/aoe-circle-with-middle-black.svg
similarity index 100%
rename from images/aoe-circle-with-middle-black.svg
rename to dist/images/aoe-circle-with-middle-black.svg
diff --git a/images/aoe-circle-with-side-black.svg b/dist/images/aoe-circle-with-side-black.svg
similarity index 100%
rename from images/aoe-circle-with-side-black.svg
rename to dist/images/aoe-circle-with-side-black.svg
diff --git a/images/aoe-circle.svg b/dist/images/aoe-circle.svg
similarity index 100%
rename from images/aoe-circle.svg
rename to dist/images/aoe-circle.svg
diff --git a/images/aoe-line-3-with-black.svg b/dist/images/aoe-line-3-with-black.svg
similarity index 100%
rename from images/aoe-line-3-with-black.svg
rename to dist/images/aoe-line-3-with-black.svg
diff --git a/images/aoe-line-4-with-black.svg b/dist/images/aoe-line-4-with-black.svg
similarity index 100%
rename from images/aoe-line-4-with-black.svg
rename to dist/images/aoe-line-4-with-black.svg
diff --git a/images/aoe-line-6-with-black.svg b/dist/images/aoe-line-6-with-black.svg
similarity index 100%
rename from images/aoe-line-6-with-black.svg
rename to dist/images/aoe-line-6-with-black.svg
diff --git a/images/aoe-triangle-2-side-with-black.svg b/dist/images/aoe-triangle-2-side-with-black.svg
similarity index 100%
rename from images/aoe-triangle-2-side-with-black.svg
rename to dist/images/aoe-triangle-2-side-with-black.svg
diff --git a/images/aoe-triangle-2-side.svg b/dist/images/aoe-triangle-2-side.svg
similarity index 100%
rename from images/aoe-triangle-2-side.svg
rename to dist/images/aoe-triangle-2-side.svg
diff --git a/images/aoe-triangle-3-side-with-corner-black.svg b/dist/images/aoe-triangle-3-side-with-corner-black.svg
similarity index 100%
rename from images/aoe-triangle-3-side-with-corner-black.svg
rename to dist/images/aoe-triangle-3-side-with-corner-black.svg
diff --git a/images/aoe1.svg b/dist/images/aoe1.svg
similarity index 100%
rename from images/aoe1.svg
rename to dist/images/aoe1.svg
diff --git a/images/aoe2.svg b/dist/images/aoe2.svg
similarity index 100%
rename from images/aoe2.svg
rename to dist/images/aoe2.svg
diff --git a/images/attack.svg b/dist/images/attack.svg
similarity index 100%
rename from images/attack.svg
rename to dist/images/attack.svg
diff --git a/images/attack_mod_+0.jpg b/dist/images/attack_mod_+0.jpg
similarity index 100%
rename from images/attack_mod_+0.jpg
rename to dist/images/attack_mod_+0.jpg
diff --git a/images/attack_mod_+1.jpg b/dist/images/attack_mod_+1.jpg
similarity index 100%
rename from images/attack_mod_+1.jpg
rename to dist/images/attack_mod_+1.jpg
diff --git a/images/attack_mod_+2.jpg b/dist/images/attack_mod_+2.jpg
similarity index 100%
rename from images/attack_mod_+2.jpg
rename to dist/images/attack_mod_+2.jpg
diff --git a/images/attack_mod_-1.jpg b/dist/images/attack_mod_-1.jpg
similarity index 100%
rename from images/attack_mod_-1.jpg
rename to dist/images/attack_mod_-1.jpg
diff --git a/images/attack_mod_-2.jpg b/dist/images/attack_mod_-2.jpg
similarity index 100%
rename from images/attack_mod_-2.jpg
rename to dist/images/attack_mod_-2.jpg
diff --git a/images/attack_mod_2x.jpg b/dist/images/attack_mod_2x.jpg
similarity index 100%
rename from images/attack_mod_2x.jpg
rename to dist/images/attack_mod_2x.jpg
diff --git a/images/attack_mod_back.jpg b/dist/images/attack_mod_back.jpg
similarity index 100%
rename from images/attack_mod_back.jpg
rename to dist/images/attack_mod_back.jpg
diff --git a/images/attack_mod_bless.jpg b/dist/images/attack_mod_bless.jpg
similarity index 100%
rename from images/attack_mod_bless.jpg
rename to dist/images/attack_mod_bless.jpg
diff --git a/images/attack_mod_curse.jpg b/dist/images/attack_mod_curse.jpg
similarity index 100%
rename from images/attack_mod_curse.jpg
rename to dist/images/attack_mod_curse.jpg
diff --git a/images/attack_mod_null.jpg b/dist/images/attack_mod_null.jpg
similarity index 100%
rename from images/attack_mod_null.jpg
rename to dist/images/attack_mod_null.jpg
diff --git a/images/back.jpg b/dist/images/back.jpg
similarity index 100%
rename from images/back.jpg
rename to dist/images/back.jpg
diff --git a/images/back.svg b/dist/images/back.svg
similarity index 100%
rename from images/back.svg
rename to dist/images/back.svg
diff --git a/images/bless.svg b/dist/images/bless.svg
similarity index 100%
rename from images/bless.svg
rename to dist/images/bless.svg
diff --git a/images/curse.svg b/dist/images/curse.svg
similarity index 100%
rename from images/curse.svg
rename to dist/images/curse.svg
diff --git a/images/dark.svg b/dist/images/dark.svg
similarity index 100%
rename from images/dark.svg
rename to dist/images/dark.svg
diff --git a/images/disarm.svg b/dist/images/disarm.svg
similarity index 100%
rename from images/disarm.svg
rename to dist/images/disarm.svg
diff --git a/images/draw-two.svg b/dist/images/draw-two.svg
similarity index 100%
rename from images/draw-two.svg
rename to dist/images/draw-two.svg
diff --git a/images/earth.svg b/dist/images/earth.svg
similarity index 100%
rename from images/earth.svg
rename to dist/images/earth.svg
diff --git a/images/elderDrake.special1Area.svg b/dist/images/elderDrake.special1Area.svg
similarity index 100%
rename from images/elderDrake.special1Area.svg
rename to dist/images/elderDrake.special1Area.svg
diff --git a/images/fire.svg b/dist/images/fire.svg
similarity index 100%
rename from images/fire.svg
rename to dist/images/fire.svg
diff --git a/images/fly.svg b/dist/images/fly.svg
similarity index 100%
rename from images/fly.svg
rename to dist/images/fly.svg
diff --git a/images/front.jpg b/dist/images/front.jpg
similarity index 100%
rename from images/front.jpg
rename to dist/images/front.jpg
diff --git a/images/heal.svg b/dist/images/heal.svg
similarity index 100%
rename from images/heal.svg
rename to dist/images/heal.svg
diff --git a/images/ice.svg b/dist/images/ice.svg
similarity index 100%
rename from images/ice.svg
rename to dist/images/ice.svg
diff --git a/images/icon.png b/dist/images/icon.png
similarity index 100%
rename from images/icon.png
rename to dist/images/icon.png
diff --git a/images/immobilize.svg b/dist/images/immobilize.svg
similarity index 100%
rename from images/immobilize.svg
rename to dist/images/immobilize.svg
diff --git a/images/inoxBodyguard.special1Area.svg b/dist/images/inoxBodyguard.special1Area.svg
similarity index 100%
rename from images/inoxBodyguard.special1Area.svg
rename to dist/images/inoxBodyguard.special1Area.svg
diff --git a/images/invisibility.svg b/dist/images/invisibility.svg
similarity index 100%
rename from images/invisibility.svg
rename to dist/images/invisibility.svg
diff --git a/images/jump.svg b/dist/images/jump.svg
similarity index 100%
rename from images/jump.svg
rename to dist/images/jump.svg
diff --git a/images/light.svg b/dist/images/light.svg
similarity index 100%
rename from images/light.svg
rename to dist/images/light.svg
diff --git a/images/loot.svg b/dist/images/loot.svg
similarity index 100%
rename from images/loot.svg
rename to dist/images/loot.svg
diff --git a/images/minus-circle.svg b/dist/images/minus-circle.svg
similarity index 100%
rename from images/minus-circle.svg
rename to dist/images/minus-circle.svg
diff --git a/images/move.svg b/dist/images/move.svg
similarity index 100%
rename from images/move.svg
rename to dist/images/move.svg
diff --git a/images/muddle.svg b/dist/images/muddle.svg
similarity index 100%
rename from images/muddle.svg
rename to dist/images/muddle.svg
diff --git a/images/pierce.svg b/dist/images/pierce.svg
similarity index 100%
rename from images/pierce.svg
rename to dist/images/pierce.svg
diff --git a/images/plus-circle.svg b/dist/images/plus-circle.svg
similarity index 100%
rename from images/plus-circle.svg
rename to dist/images/plus-circle.svg
diff --git a/images/poison.svg b/dist/images/poison.svg
similarity index 100%
rename from images/poison.svg
rename to dist/images/poison.svg
diff --git a/images/push.svg b/dist/images/push.svg
similarity index 100%
rename from images/push.svg
rename to dist/images/push.svg
diff --git a/images/range.svg b/dist/images/range.svg
similarity index 100%
rename from images/range.svg
rename to dist/images/range.svg
diff --git a/images/retaliate.svg b/dist/images/retaliate.svg
similarity index 100%
rename from images/retaliate.svg
rename to dist/images/retaliate.svg
diff --git a/images/settings.svg b/dist/images/settings.svg
similarity index 100%
rename from images/settings.svg
rename to dist/images/settings.svg
diff --git a/images/shield.svg b/dist/images/shield.svg
similarity index 100%
rename from images/shield.svg
rename to dist/images/shield.svg
diff --git a/images/shuffle-black.svg b/dist/images/shuffle-black.svg
similarity index 100%
rename from images/shuffle-black.svg
rename to dist/images/shuffle-black.svg
diff --git a/images/shuffle.svg b/dist/images/shuffle.svg
similarity index 100%
rename from images/shuffle.svg
rename to dist/images/shuffle.svg
diff --git a/images/sightlessEye.special1Area.svg b/dist/images/sightlessEye.special1Area.svg
similarity index 100%
rename from images/sightlessEye.special1Area.svg
rename to dist/images/sightlessEye.special1Area.svg
diff --git a/images/sightlessEye.special2Area.svg b/dist/images/sightlessEye.special2Area.svg
similarity index 100%
rename from images/sightlessEye.special2Area.svg
rename to dist/images/sightlessEye.special2Area.svg
diff --git a/images/strengthen.svg b/dist/images/strengthen.svg
similarity index 100%
rename from images/strengthen.svg
rename to dist/images/strengthen.svg
diff --git a/images/stun.svg b/dist/images/stun.svg
similarity index 100%
rename from images/stun.svg
rename to dist/images/stun.svg
diff --git a/images/target.svg b/dist/images/target.svg
similarity index 100%
rename from images/target.svg
rename to dist/images/target.svg
diff --git a/images/use_element.svg b/dist/images/use_element.svg
similarity index 100%
rename from images/use_element.svg
rename to dist/images/use_element.svg
diff --git a/images/wound.svg b/dist/images/wound.svg
similarity index 100%
rename from images/wound.svg
rename to dist/images/wound.svg
diff --git a/index.html b/dist/index.html
similarity index 76%
rename from index.html
rename to dist/index.html
index 2479994e..19657244 100644
--- a/index.html
+++ b/dist/index.html
@@ -1,10 +1,10 @@
-
+
Gloomy Companion
-
+
@@ -13,16 +13,10 @@
-
-
-
-
-
-
-
-
+
+
-
+
diff --git a/dist/main.js b/dist/main.js
new file mode 100644
index 00000000..0c87e9cc
--- /dev/null
+++ b/dist/main.js
@@ -0,0 +1 @@
+!function(e){var a={};function t(n){if(a[n])return a[n].exports;var l=a[n]={i:n,l:!1,exports:{}};return e[n].call(l.exports,l,l.exports,t),l.l=!0,l.exports}t.m=e,t.c=a,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,a){if(1&a&&(e=t(e)),8&a)return e;if(4&a&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&a&&"string"!=typeof e)for(var l in e)t.d(n,l,function(a){return e[a]}.bind(null,l));return n},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="",t(t.s=0)}([function(e,a,t){"use strict";t.r(a);const n={"Ancient Artillery":{name:"Ancient Artillery",class:"Ancient Artillery"},"Bandit Archer":{name:"Bandit Archer",class:"Archer"},"Bandit Guard":{name:"Bandit Guard",class:"Guard"},"Black Imp":{name:"Black Imp",class:"Imp"},Boss:{name:"Boss",class:"Boss"},"Cave Bear":{name:"Cave Bear",class:"Cave Bear"},"City Archer":{name:"City Archer",class:"Archer"},"City Guard":{name:"City Guard",class:"Guard"},Cultist:{name:"Cultist",class:"Cultist"},"Deep Terror":{name:"Deep Terror",class:"Deep Terror"},"Earth Demon":{name:"Earth Demon",class:"Earth Demon"},"Flame Demon":{name:"Flame Demon",class:"Flame Demon"},"Forest Imp":{name:"Forest Imp",class:"Imp"},"Frost Demon":{name:"Frost Demon",class:"Frost Demon"},"Giant Viper":{name:"Giant Viper",class:"Giant Viper"},"Harrower Infester":{name:"Harrower Infester",class:"Harrower Infester"},Hound:{name:"Hound",class:"Hound"},"Inox Archer":{name:"Inox Archer",class:"Archer"},"Inox Guard":{name:"Inox Guard",class:"Guard"},"Inox Shaman":{name:"Inox Shaman",class:"Shaman"},"Living Bones":{name:"Living Bones",class:"Living Bones"},"Living Corpse":{name:"Living Corpse",class:"Living Corpse"},"Living Spirit":{name:"Living Spirit",class:"Living Spirit"},Lurker:{name:"Lurker",class:"Lurker"},"Night Demon":{name:"Night Demon",class:"Night Demon"},Ooze:{name:"Ooze",class:"Ooze"},"Rending Drake":{name:"Rending Drake",class:"Rending Drake"},"Savvas Icestorm":{name:"Savvas Icestorm",class:"Savvas Icestorm"},"Savvas Lavaflow":{name:"Savvas Lavaflow",class:"Savvas Lavaflow"},"Spitting Drake":{name:"Spitting Drake",class:"Spitting Drake"},"Stone Golem":{name:"Stone Golem",class:"Stone Golem"},"Sun Demon":{name:"Sun Demon",class:"Sun Demon"},"Vermling Scout":{name:"Vermling Scout",class:"Scout"},"Vermling Shaman":{name:"Vermling Shaman",class:"Shaman"},"Wind Demon":{name:"Wind Demon",class:"Wind Demon"}},l={BLESS:"bless",CURSE:"curse",PLUS0:"plus0",PLUS1:"plus1",PLUS2:"plus2",MINUS1:"minus1",MINUS2:"minus2",NULL:"null",DOUBLE:"double"},i={BLESS:{type:l.BLESS,shuffle:!1,image:"images/attack_mod_bless.jpg"},CURSE:{type:l.CURSE,shuffle:!1,image:"images/attack_mod_curse.jpg"},PLUS0:{type:l.PLUS0,shuffle:!1,image:"images/attack_mod_+0.jpg"},PLUS1:{type:l.PLUS1,shuffle:!1,image:"images/attack_mod_+1.jpg"},PLUS2:{type:l.PLUS2,shuffle:!1,image:"images/attack_mod_+2.jpg"},MINUS1:{type:l.MINUS1,shuffle:!1,image:"images/attack_mod_-1.jpg"},MINUS2:{type:l.MINUS2,shuffle:!1,image:"images/attack_mod_-2.jpg"},NULL:{type:l.NULL,shuffle:!0,image:"images/attack_mod_null.jpg"},DOUBLE:{type:l.DOUBLE,shuffle:!0,image:"images/attack_mod_2x.jpg"}},s=[i.PLUS0,i.PLUS0,i.PLUS0,i.PLUS0,i.PLUS0,i.PLUS0,i.PLUS1,i.PLUS1,i.PLUS1,i.PLUS1,i.PLUS1,i.MINUS1,i.MINUS1,i.MINUS1,i.MINUS1,i.MINUS1,i.PLUS2,i.MINUS2,i.NULL,i.DOUBLE],r={monsters:{"Ancient Artillery":{level:[{level:0,normal:{health:4,move:0,attack:2,range:4,attributes:[]},elite:{health:7,move:0,attack:3,range:5,attributes:[]}},{level:1,normal:{health:6,move:0,attack:2,range:4,attributes:[]},elite:{health:9,move:0,attack:3,range:5,attributes:[]}},{level:2,normal:{health:7,move:0,attack:2,range:5,attributes:[]},elite:{health:11,move:0,attack:3,range:6,attributes:[]}},{level:3,normal:{health:8,move:0,attack:3,range:5,attributes:[]},elite:{health:13,move:0,attack:4,range:6,attributes:[]}},{level:4,normal:{health:9,move:0,attack:4,range:5,attributes:[]},elite:{health:13,move:0,attack:4,range:6,attributes:["%target% 2"]}},{level:5,normal:{health:11,move:0,attack:4,range:6,attributes:[]},elite:{health:15,move:0,attack:4,range:7,attributes:["%target% 2"]}},{level:6,normal:{health:14,move:0,attack:4,range:6,attributes:[]},elite:{health:16,move:0,attack:5,range:7,attributes:["%target% 2"]}},{level:7,normal:{health:16,move:0,attack:4,range:7,attributes:[]},elite:{health:20,move:0,attack:5,range:7,attributes:["%target% 2"]}}]},"Bandit Archer":{level:[{level:0,normal:{health:4,move:2,attack:2,range:3,attributes:[]},elite:{health:6,move:2,attack:3,range:3,attributes:[]}},{level:1,normal:{health:5,move:2,attack:2,range:4,attributes:[]},elite:{health:7,move:2,attack:3,range:5,attributes:[]}},{level:2,normal:{health:6,move:3,attack:2,range:4,attributes:[]},elite:{health:9,move:3,attack:3,range:5,attributes:[]}},{level:3,normal:{health:6,move:3,attack:3,range:4,attributes:[]},elite:{health:10,move:3,attack:4,range:5,attributes:[]}},{level:4,normal:{health:8,move:3,attack:3,range:4,attributes:[]},elite:{health:10,move:3,attack:4,range:6,attributes:["%poison%"]}},{level:5,normal:{health:10,move:3,attack:3,range:5,attributes:[]},elite:{health:12,move:4,attack:4,range:6,attributes:["%poison%"]}},{level:6,normal:{health:10,move:3,attack:4,range:5,attributes:[]},elite:{health:13,move:4,attack:5,range:6,attributes:["%poison%"]}},{level:7,normal:{health:13,move:3,attack:4,range:5,attributes:[]},elite:{health:17,move:4,attack:5,range:6,attributes:["%poison%"]}}]},"Bandit Guard":{level:[{level:0,normal:{health:5,move:2,attack:2,range:0,attributes:[]},elite:{health:9,move:2,attack:3,range:0,attributes:[]}},{level:1,normal:{health:6,move:3,attack:2,range:0,attributes:[]},elite:{health:9,move:2,attack:3,range:0,attributes:["%shield% 1"]}},{level:2,normal:{health:6,move:3,attack:3,range:0,attributes:[]},elite:{health:10,move:2,attack:4,range:0,attributes:["%shield% 1"]}},{level:3,normal:{health:9,move:3,attack:3,range:0,attributes:[]},elite:{health:10,move:3,attack:4,range:0,attributes:["%shield% 2"]}},{level:4,normal:{health:10,move:4,attack:3,range:0,attributes:[]},elite:{health:11,move:3,attack:4,range:0,attributes:["%muddle%","%shield% 2"]}},{level:5,normal:{health:11,move:4,attack:4,range:0,attributes:[]},elite:{health:12,move:3,attack:5,range:0,attributes:["%muddle%","%shield% 2"]}},{level:6,normal:{health:14,move:4,attack:4,range:0,attributes:[]},elite:{health:14,move:4,attack:5,range:0,attributes:["%muddle%","%shield% 2"]}},{level:7,normal:{health:16,move:5,attack:4,range:0,attributes:[]},elite:{health:14,move:3,attack:5,range:0,attributes:["%muddle%","%shield% 3"]}}]},"Black Imp":{level:[{level:0,normal:{health:3,move:1,attack:1,range:3,attributes:[]},elite:{health:4,move:1,attack:2,range:3,attributes:["%poison%"]}},{level:1,normal:{health:4,move:1,attack:1,range:3,attributes:["%poison%"]},elite:{health:6,move:1,attack:2,range:3,attributes:["%poison%"]}},{level:2,normal:{health:5,move:1,attack:1,range:4,attributes:["%poison%"]},elite:{health:8,move:1,attack:2,range:4,attributes:["%poison%"]}},{level:3,normal:{health:5,move:1,attack:2,range:4,attributes:["%poison%"]},elite:{health:8,move:1,attack:3,range:4,attributes:["Attackers gain Disadvantage","%poison%"]}},{level:4,normal:{health:7,move:1,attack:2,range:4,attributes:["%poison%"]},elite:{health:11,move:1,attack:3,range:4,attributes:["Attackers gain Disadvantage","%poison%"]}},{level:5,normal:{health:9,move:1,attack:2,range:4,attributes:["%poison%"]},elite:{health:12,move:1,attack:3,range:5,attributes:["Attackers gain Disadvantage","%poison%"]}},{level:6,normal:{health:10,move:1,attack:3,range:4,attributes:["%poison%"]},elite:{health:14,move:1,attack:4,range:5,attributes:["Attackers gain Disadvantage","%poison%"]}},{level:7,normal:{health:12,move:1,attack:3,range:4,attributes:["%poison%"]},elite:{health:17,move:1,attack:4,range:5,attributes:["Attackers gain Disadvantage","%poison%"]}}]},"Cave Bear":{level:[{level:0,normal:{health:7,move:3,attack:3,range:0,attributes:[]},elite:{health:11,move:3,attack:4,range:0,attributes:[]}},{level:1,normal:{health:9,move:3,attack:3,range:0,attributes:[]},elite:{health:14,move:3,attack:4,range:0,attributes:[]}},{level:2,normal:{health:11,move:4,attack:3,range:0,attributes:[]},elite:{health:17,move:4,attack:4,range:0,attributes:[]}},{level:3,normal:{health:13,move:4,attack:4,range:0,attributes:[]},elite:{health:20,move:4,attack:5,range:0,attributes:[]}},{level:4,normal:{health:16,move:4,attack:4,range:0,attributes:[]},elite:{health:21,move:5,attack:5,range:0,attributes:["%wound%"]}},{level:5,normal:{health:17,move:5,attack:4,range:0,attributes:["%wound%"]},elite:{health:24,move:5,attack:6,range:0,attributes:["%wound%"]}},{level:6,normal:{health:19,move:5,attack:5,range:0,attributes:["%wound%"]},elite:{health:28,move:5,attack:7,range:0,attributes:["%wound%"]}},{level:7,normal:{health:22,move:5,attack:5,range:0,attributes:["%wound%"]},elite:{health:33,move:5,attack:7,range:0,attributes:["%wound%"]}}]},"City Archer":{level:[{level:0,normal:{health:4,move:1,attack:2,range:3,attributes:[]},elite:{health:6,move:1,attack:3,range:4,attributes:[]}},{level:1,normal:{health:5,move:1,attack:2,range:4,attributes:[]},elite:{health:6,move:1,attack:3,range:5,attributes:["%pierce% 1","%shield% 1"]}},{level:2,normal:{health:6,move:1,attack:3,range:4,attributes:[]},elite:{health:7,move:1,attack:4,range:5,attributes:["%pierce% 2","%shield% 1"]}},{level:3,normal:{health:6,move:2,attack:3,range:4,attributes:["%shield% 1"]},elite:{health:8,move:2,attack:4,range:5,attributes:["%pierce% 2","%shield% 2"]}},{level:4,normal:{health:8,move:2,attack:3,range:5,attributes:["%shield% 1"]},elite:{health:10,move:2,attack:4,range:6,attributes:["%pierce% 2","%shield% 2"]}},{level:5,normal:{health:9,move:2,attack:4,range:5,attributes:["%shield% 1"]},elite:{health:11,move:2,attack:5,range:6,attributes:["%pierce% 3","%shield% 2"]}},{level:6,normal:{health:9,move:3,attack:4,range:5,attributes:["%shield% 2"]},elite:{health:12,move:3,attack:6,range:6,attributes:["%pierce% 3","%shield% 2"]}},{level:7,normal:{health:10,move:3,attack:4,range:6,attributes:["%shield% 2"]},elite:{health:13,move:3,attack:6,range:7,attributes:["%pierce% 3","%shield% 3"]}}]},"City Guard":{level:[{level:0,normal:{health:5,move:2,attack:2,range:0,attributes:[]},elite:{health:6,move:2,attack:3,range:0,attributes:["%shield% 1"]}},{level:1,normal:{health:5,move:2,attack:2,range:0,attributes:["%shield% 1"]},elite:{health:6,move:2,attack:3,range:0,attributes:["%shield% 2"]}},{level:2,normal:{health:7,move:2,attack:2,range:0,attributes:["%shield% 1"]},elite:{health:9,move:2,attack:3,range:0,attributes:["%shield% 2"]}},{level:3,normal:{health:8,move:2,attack:3,range:0,attributes:["%shield% 1"]},elite:{health:9,move:2,attack:4,range:0,attributes:["%retaliate% 1","%shield% 2"]}},{level:4,normal:{health:9,move:3,attack:3,range:0,attributes:["%shield% 1"]},elite:{health:10,move:3,attack:4,range:0,attributes:["%retaliate% 2","%shield% 2"]}},{level:5,normal:{health:10,move:3,attack:3,range:0,attributes:["%shield% 2"]},elite:{health:12,move:3,attack:4,range:0,attributes:["%retaliate% 2","%shield% 3"]}},{level:6,normal:{health:11,move:3,attack:4,range:0,attributes:["%shield% 2"]},elite:{health:13,move:3,attack:5,range:0,attributes:["%retaliate% 3","%shield% 3"]}},{level:7,normal:{health:13,move:3,attack:4,range:0,attributes:["%shield% 2"]},elite:{health:14,move:3,attack:6,range:0,attributes:["%retaliate% 3","%shield% 3"]}}]},Cultist:{level:[{level:0,normal:{health:4,move:2,attack:1,range:0,attributes:[]},elite:{health:7,move:2,attack:2,range:0,attributes:[]}},{level:1,normal:{health:5,move:2,attack:1,range:0,attributes:[]},elite:{health:9,move:2,attack:2,range:0,attributes:[]}},{level:2,normal:{health:7,move:2,attack:1,range:0,attributes:[]},elite:{health:12,move:2,attack:2,range:0,attributes:[]}},{level:3,normal:{health:9,move:3,attack:1,range:0,attributes:[]},elite:{health:13,move:3,attack:2,range:0,attributes:["%curse%"]}},{level:4,normal:{health:10,move:3,attack:2,range:0,attributes:[]},elite:{health:15,move:3,attack:3,range:0,attributes:["%curse%"]}},{level:5,normal:{health:11,move:3,attack:2,range:0,attributes:["%curse%"]},elite:{health:18,move:3,attack:3,range:0,attributes:["%curse%"]}},{level:6,normal:{health:14,move:3,attack:2,range:0,attributes:["%curse%"]},elite:{health:22,move:3,attack:3,range:0,attributes:["%curse%"]}},{level:7,normal:{health:15,move:3,attack:3,range:0,attributes:["%curse%"]},elite:{health:25,move:3,attack:4,range:0,attributes:["%curse%"]}}]},"Deep Terror":{level:[{level:0,normal:{health:3,move:0,attack:2,range:0,attributes:[]},elite:{health:5,move:0,attack:3,range:0,attributes:[]}},{level:1,normal:{health:4,move:0,attack:2,range:0,attributes:["%retaliate% 1"]},elite:{health:6,move:0,attack:3,range:0,attributes:["%retaliate% 1"]}},{level:2,normal:{health:4,move:0,attack:3,range:0,attributes:["%retaliate% 1"]},elite:{health:7,move:0,attack:4,range:0,attributes:["%retaliate% 1"]}},{level:3,normal:{health:5,move:0,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:8,move:0,attack:4,range:0,attributes:["%retaliate% 2"]}},{level:4,normal:{health:6,move:0,attack:4,range:0,attributes:["%retaliate% 2"]},elite:{health:9,move:0,attack:5,range:0,attributes:["%retaliate% 2"]}},{level:5,normal:{health:7,move:0,attack:4,range:0,attributes:["%retaliate% 3"]},elite:{health:11,move:0,attack:5,range:0,attributes:["%retaliate% 3"]}},{level:6,normal:{health:8,move:0,attack:5,range:0,attributes:["%retaliate% 3"]},elite:{health:13,move:0,attack:6,range:0,attributes:["%retaliate% 3"]}},{level:7,normal:{health:9,move:0,attack:5,range:0,attributes:["%retaliate% 4"]},elite:{health:15,move:0,attack:6,range:0,attributes:["%retaliate% 4"]}}]},"Earth Demon":{level:[{level:0,normal:{health:7,move:1,attack:3,range:0,attributes:[]},elite:{health:10,move:2,attack:4,range:0,attributes:[]}},{level:1,normal:{health:9,move:1,attack:3,range:0,attributes:[]},elite:{health:13,move:2,attack:4,range:0,attributes:[]}},{level:2,normal:{health:12,move:1,attack:3,range:0,attributes:[]},elite:{health:18,move:2,attack:4,range:0,attributes:[]}},{level:3,normal:{health:13,move:2,attack:3,range:0,attributes:[]},elite:{health:20,move:2,attack:4,range:0,attributes:["%immobilize%"]}},{level:4,normal:{health:15,move:2,attack:4,range:0,attributes:[]},elite:{health:21,move:3,attack:5,range:0,attributes:["%immobilize%"]}},{level:5,normal:{health:17,move:2,attack:4,range:0,attributes:["%immobilize%"]},elite:{health:25,move:3,attack:5,range:0,attributes:["%immobilize%"]}},{level:6,normal:{health:20,move:2,attack:4,range:0,attributes:["%immobilize%"]},elite:{health:27,move:3,attack:6,range:0,attributes:["%immobilize%"]}},{level:7,normal:{health:22,move:3,attack:4,range:0,attributes:["%immobilize%"]},elite:{health:32,move:3,attack:6,range:0,attributes:["%immobilize%"]}}]},"Flame Demon":{level:[{level:0,normal:{health:2,move:3,attack:2,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:3,move:3,attack:2,range:3,attributes:["%flying%","%shield% 3"]}},{level:1,normal:{health:2,move:3,attack:2,range:3,attributes:["%flying%","%shield% 3"]},elite:{health:3,move:3,attack:2,range:4,attributes:["%flying%","%retaliate% 2: %range% 2","%shield% 4"]}},{level:2,normal:{health:3,move:3,attack:3,range:3,attributes:["%flying%","%shield% 3"]},elite:{health:4,move:3,attack:3,range:4,attributes:["%flying%","%retaliate% 3: %range% 2","%shield% 4"]}},{level:3,normal:{health:3,move:3,attack:3,range:4,attributes:["%flying%","%retaliate% 2: %range% 2","%shield% 3"]},elite:{health:5,move:3,attack:3,range:5,attributes:["%flying%","%retaliate% 3: %range% 3","%shield% 4"]}},{level:4,normal:{health:3,move:4,attack:3,range:4,attributes:["%flying%","%retaliate% 3: %range% 2","%shield% 3"]},elite:{health:5,move:4,attack:4,range:5,attributes:["%flying%","%retaliate% 4: %range% 3","%shield% 4"]}},{level:5,normal:{health:4,move:4,attack:3,range:4,attributes:["%flying%","%retaliate% 3: %range% 2","%shield% 4"]},elite:{health:6,move:4,attack:4,range:5,attributes:["%flying%","%retaliate% 4: %range% 3","%shield% 5"]}},{level:6,normal:{health:4,move:4,attack:4,range:4,attributes:["%flying%","%retaliate% 4: %range% 2","%shield% 4"]},elite:{health:7,move:4,attack:5,range:5,attributes:["%flying%","%retaliate% 5: %range% 3","%shield% 5"]}},{level:7,normal:{health:5,move:4,attack:4,range:5,attributes:["%flying%","%retaliate% 4: %range% 3","%shield% 4"]},elite:{health:8,move:4,attack:5,range:6,attributes:["%flying%","%retaliate% 5: %range% 4","%shield% 5"]}}]},"Frost Demon":{level:[{level:0,normal:{health:5,move:2,attack:3,range:0,attributes:[]},elite:{health:10,move:3,attack:3,range:0,attributes:[]}},{level:1,normal:{health:6,move:2,attack:3,range:0,attributes:["%retaliate% 1"]},elite:{health:10,move:3,attack:3,range:0,attributes:["%retaliate% 2"]}},{level:2,normal:{health:7,move:3,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:12,move:4,attack:4,range:0,attributes:["%retaliate% 2"]}},{level:3,normal:{health:8,move:3,attack:4,range:0,attributes:["%retaliate% 2"]},elite:{health:14,move:4,attack:4,range:0,attributes:["%retaliate% 3"]}},{level:4,normal:{health:10,move:3,attack:4,range:0,attributes:["%retaliate% 2"]},elite:{health:18,move:4,attack:4,range:0,attributes:["%retaliate% 3"]}},{level:5,normal:{health:11,move:3,attack:4,range:0,attributes:["%retaliate% 3"]},elite:{health:20,move:4,attack:5,range:0,attributes:["%retaliate% 3"]}},{level:6,normal:{health:12,move:3,attack:5,range:0,attributes:["%retaliate% 3"]},elite:{health:22,move:4,attack:5,range:0,attributes:["%retaliate% 4"]}},{level:7,normal:{health:14,move:3,attack:5,range:0,attributes:["%retaliate% 3"]},elite:{health:25,move:4,attack:5,range:0,attributes:["%retaliate% 4"]}}]},"Forest Imp":{level:[{level:0,normal:{health:1,move:3,attack:1,range:3,attributes:["%flying%","%shield% 1"]},elite:{health:4,move:3,attack:1,range:3,attributes:["%flying%","%shield% 1"]}},{level:1,normal:{health:2,move:3,attack:1,range:3,attributes:["%flying%","%shield% 1"]},elite:{health:5,move:3,attack:2,range:3,attributes:["%flying%","%shield% 1"]}},{level:2,normal:{health:2,move:3,attack:2,range:3,attributes:["%flying%","%shield% 1"]},elite:{health:6,move:3,attack:2,range:3,attributes:["%flying%","%curse%","%shield% 1"]}},{level:3,normal:{health:3,move:4,attack:2,range:4,attributes:["%flying%","%shield% 1"]},elite:{health:7,move:4,attack:2,range:4,attributes:["%flying%","%curse%","%shield% 1"]}},{level:4,normal:{health:3,move:4,attack:2,range:4,attributes:["%flying%","%shield% 2"]},elite:{health:7,move:4,attack:2,range:4,attributes:["%flying%","%curse%","%shield% 2"]}},{level:5,normal:{health:4,move:4,attack:2,range:4,attributes:["%flying%","%curse%","%shield% 2"]},elite:{health:8,move:4,attack:3,range:4,attributes:["%flying%","%curse%","%shield% 2"]}},{level:6,normal:{health:4,move:4,attack:3,range:4,attributes:["%flying%","%curse%","%shield% 2"]},elite:{health:9,move:4,attack:4,range:4,attributes:["%flying%","%curse%","%shield% 2"]}},{level:7,normal:{health:6,move:4,attack:3,range:4,attributes:["%flying%","%curse%","%shield% 2"]},elite:{health:11,move:4,attack:4,range:4,attributes:["%flying%","%curse%","%shield% 2"]}}]},"Giant Viper":{level:[{level:0,normal:{health:2,move:2,attack:1,range:0,attributes:["%poison%"]},elite:{health:3,move:2,attack:2,range:0,attributes:["%poison%"]}},{level:1,normal:{health:3,move:2,attack:1,range:0,attributes:["%poison%"]},elite:{health:5,move:2,attack:2,range:0,attributes:["%poison%"]}},{level:2,normal:{health:4,move:3,attack:1,range:0,attributes:["%poison%"]},elite:{health:7,move:3,attack:2,range:0,attributes:["%poison%"]}},{level:3,normal:{health:4,move:3,attack:2,range:0,attributes:["%poison%"]},elite:{health:8,move:3,attack:3,range:0,attributes:["%poison%"]}},{level:4,normal:{health:6,move:3,attack:2,range:0,attributes:["%poison%"]},elite:{health:11,move:3,attack:3,range:0,attributes:["%poison%"]}},{level:5,normal:{health:7,move:3,attack:3,range:0,attributes:["%poison%"]},elite:{health:13,move:4,attack:3,range:0,attributes:["%poison%"]}},{level:6,normal:{health:8,move:4,attack:3,range:0,attributes:["%poison%"]},elite:{health:14,move:4,attack:4,range:0,attributes:["%poison%"]}},{level:7,normal:{health:10,move:4,attack:3,range:0,attributes:["%poison%"]},elite:{health:17,move:4,attack:4,range:0,attributes:["%poison%"]}}]},"Harrower Infester":{level:[{level:0,normal:{health:6,move:2,attack:2,range:0,attributes:[]},elite:{health:12,move:2,attack:2,range:0,attributes:[]}},{level:1,normal:{health:7,move:2,attack:2,range:0,attributes:["%retaliate% 1"]},elite:{health:12,move:3,attack:2,range:0,attributes:["%retaliate% 2"]}},{level:2,normal:{health:8,move:2,attack:2,range:0,attributes:["%retaliate% 2"]},elite:{health:14,move:3,attack:3,range:0,attributes:["%retaliate% 2"]}},{level:3,normal:{health:10,move:2,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:17,move:3,attack:3,range:0,attributes:["%retaliate% 3"]}},{level:4,normal:{health:12,move:3,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:19,move:3,attack:4,range:0,attributes:["%retaliate% 3"]}},{level:5,normal:{health:12,move:3,attack:4,range:0,attributes:["%retaliate% 3"]},elite:{health:21,move:3,attack:5,range:0,attributes:["%retaliate% 3"]}},{level:6,normal:{health:15,move:3,attack:4,range:0,attributes:["%retaliate% 3"]},elite:{health:22,move:4,attack:5,range:0,attributes:["%retaliate% 4"]}},{level:7,normal:{health:17,move:3,attack:4,range:0,attributes:["%retaliate% 4"]},elite:{health:26,move:4,attack:5,range:0,attributes:["%retaliate% 4"]}}]},Hound:{level:[{level:0,normal:{health:4,move:3,attack:2,range:0,attributes:[]},elite:{health:6,move:5,attack:2,range:0,attributes:[]}},{level:1,normal:{health:4,move:4,attack:2,range:0,attributes:["%retaliate% 1"]},elite:{health:6,move:5,attack:2,range:0,attributes:["%retaliate% 2"]}},{level:2,normal:{health:6,move:4,attack:2,range:0,attributes:["%retaliate% 1"]},elite:{health:7,move:5,attack:3,range:0,attributes:["%retaliate% 2"]}},{level:3,normal:{health:8,move:4,attack:2,range:0,attributes:["%retaliate% 1"]},elite:{health:8,move:5,attack:4,range:0,attributes:["%retaliate% 2"]}},{level:4,normal:{health:8,move:4,attack:3,range:0,attributes:["%retaliate% 1"]},elite:{health:11,move:5,attack:4,range:0,attributes:["%retaliate% 2"]}},{level:5,normal:{health:9,move:4,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:12,move:5,attack:4,range:0,attributes:["%retaliate% 3"]}},{level:6,normal:{health:11,move:5,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:15,move:6,attack:4,range:0,attributes:["%retaliate% 3"]}},{level:7,normal:{health:15,move:5,attack:3,range:0,attributes:["%retaliate% 2"]},elite:{health:15,move:6,attack:5,range:0,attributes:["%retaliate% 4"]}}]},"Inox Archer":{level:[{level:0,normal:{health:5,move:2,attack:2,range:2,attributes:[]},elite:{health:7,move:2,attack:3,range:3,attributes:[]}},{level:1,normal:{health:6,move:2,attack:2,range:3,attributes:[]},elite:{health:8,move:2,attack:3,range:4,attributes:[]}},{level:2,normal:{health:8,move:2,attack:2,range:3,attributes:[]},elite:{health:11,move:2,attack:3,range:4,attributes:[]}},{level:3,normal:{health:9,move:2,attack:3,range:3,attributes:[]},elite:{health:13,move:2,attack:4,range:4,attributes:[]}},{level:4,normal:{health:10,move:3,attack:3,range:3,attributes:[]},elite:{health:14,move:3,attack:4,range:4,attributes:["%wound%"]}},{level:5,normal:{health:12,move:3,attack:3,range:4,attributes:[]},elite:{health:17,move:3,attack:4,range:5,attributes:["%wound%"]}},{level:6,normal:{health:12,move:3,attack:4,range:4,attributes:["%wound%"]},elite:{health:19,move:3,attack:5,range:5,attributes:["%wound%"]}},{level:7,normal:{health:15,move:3,attack:4,range:4,attributes:["%wound%"]},elite:{health:23,move:3,attack:5,range:5,attributes:["%wound%"]}}]},"Inox Guard":{level:[{level:0,normal:{health:5,move:2,attack:2,range:0,attributes:[]},elite:{health:9,move:1,attack:3,range:0,attributes:["%retaliate% 1"]}},{level:1,normal:{health:8,move:2,attack:2,range:0,attributes:[]},elite:{health:10,move:2,attack:3,range:0,attributes:["%retaliate% 2"]}},{level:2,normal:{health:9,move:2,attack:3,range:0,attributes:[]},elite:{health:12,move:2,attack:4,range:0,attributes:["%retaliate% 2"]}},{level:3,normal:{health:11,move:3,attack:3,range:0,attributes:[]},elite:{health:15,move:2,attack:4,range:0,attributes:["%retaliate% 3"]}},{level:4,normal:{health:12,move:3,attack:3,range:0,attributes:["%retaliate% 1"]},elite:{health:17,move:2,attack:5,range:0,attributes:["%retaliate% 3"]}},{level:5,normal:{health:13,move:3,attack:4,range:0,attributes:["%retaliate% 1"]},elite:{health:19,move:2,attack:5,range:0,attributes:["%retaliate% 4"]}},{level:6,normal:{health:16,move:3,attack:4,range:0,attributes:["%retaliate% 1"]},elite:{health:21,move:3,attack:5,range:0,attributes:["%retaliate% 4"]}},{level:7,normal:{health:19,move:3,attack:4,range:0,attributes:["%retaliate% 2"]},elite:{health:23,move:3,attack:6,range:0,attributes:["%retaliate% 4"]}}]},"Inox Shaman":{level:[{level:0,normal:{health:4,move:1,attack:2,range:3,attributes:[]},elite:{health:6,move:2,attack:3,range:3,attributes:[]}},{level:1,normal:{health:6,move:1,attack:2,range:3,attributes:[]},elite:{health:9,move:2,attack:3,range:3,attributes:[]}},{level:2,normal:{health:7,move:2,attack:2,range:3,attributes:[]},elite:{health:11,move:3,attack:3,range:3,attributes:[]}},{level:3,normal:{health:9,move:2,attack:2,range:4,attributes:[]},elite:{health:14,move:3,attack:3,range:4,attributes:[]}},{level:4,normal:{health:10,move:2,attack:3,range:4,attributes:[]},elite:{health:16,move:3,attack:4,range:4,attributes:[]}},{level:5,normal:{health:13,move:2,attack:3,range:4,attributes:[]},elite:{health:20,move:3,attack:4,range:4,attributes:[]}},{level:6,normal:{health:15,move:3,attack:3,range:4,attributes:[]},elite:{health:24,move:4,attack:4,range:4,attributes:[]}},{level:7,normal:{health:16,move:3,attack:4,range:4,attributes:[]},elite:{health:27,move:4,attack:5,range:4,attributes:[]}}]},"Living Bones":{level:[{level:0,normal:{health:5,move:2,attack:1,range:0,attributes:["%target% 2"]},elite:{health:6,move:4,attack:2,range:0,attributes:["%target% 2"]}},{level:1,normal:{health:5,move:3,attack:1,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:6,move:4,attack:2,range:0,attributes:["%target% 3","%shield% 1"]}},{level:2,normal:{health:5,move:3,attack:2,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:7,move:4,attack:3,range:0,attributes:["%target% 3","%shield% 1"]}},{level:3,normal:{health:7,move:3,attack:2,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:10,move:4,attack:3,range:0,attributes:["%target% 3","%shield% 1"]}},{level:4,normal:{health:7,move:3,attack:3,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:11,move:4,attack:4,range:0,attributes:["%target% 3","%shield% 1"]}},{level:5,normal:{health:9,move:3,attack:3,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:11,move:4,attack:4,range:0,attributes:["%target% 3","%shield% 2"]}},{level:6,normal:{health:10,move:4,attack:3,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:11,move:6,attack:4,range:0,attributes:["%target% 3","%shield% 2"]}},{level:7,normal:{health:13,move:4,attack:3,range:0,attributes:["%target% 2","%shield% 1"]},elite:{health:14,move:6,attack:4,range:0,attributes:["%target% 3","%shield% 2"]}}]},"Living Corpse":{level:[{level:0,normal:{health:5,move:1,attack:3,range:0,attributes:[]},elite:{health:10,move:1,attack:3,range:0,attributes:[]}},{level:1,normal:{health:7,move:1,attack:3,range:0,attributes:[]},elite:{health:10,move:1,attack:4,range:0,attributes:[]}},{level:2,normal:{health:9,move:1,attack:3,range:0,attributes:[]},elite:{health:13,move:1,attack:4,range:0,attributes:[]}},{level:3,normal:{health:10,move:1,attack:4,range:0,attributes:[]},elite:{health:13,move:2,attack:5,range:0,attributes:[]}},{level:4,normal:{health:11,move:2,attack:4,range:0,attributes:[]},elite:{health:15,move:2,attack:5,range:0,attributes:["%poison%"]}},{level:5,normal:{health:13,move:2,attack:4,range:0,attributes:[]},elite:{health:17,move:2,attack:6,range:0,attributes:["%poison%"]}},{level:6,normal:{health:14,move:2,attack:4,range:0,attributes:["%poison%"]},elite:{health:21,move:2,attack:6,range:0,attributes:["%poison%"]}},{level:7,normal:{health:15,move:2,attack:5,range:0,attributes:["%poison%"]},elite:{health:25,move:2,attack:6,range:0,attributes:["%poison%"]}}]},"Living Spirit":{level:[{level:0,normal:{health:2,move:2,attack:2,range:2,attributes:["%flying%","%shield% 1"]},elite:{health:3,move:3,attack:3,range:3,attributes:["%flying%","%shield% 2"]}},{level:1,normal:{health:2,move:2,attack:2,range:2,attributes:["%flying%","%shield% 2"]},elite:{health:3,move:3,attack:3,range:3,attributes:["%flying%","%shield% 3"]}},{level:2,normal:{health:2,move:3,attack:2,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:3,move:4,attack:3,range:4,attributes:["%flying%","%shield% 3"]}},{level:3,normal:{health:3,move:3,attack:3,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:4,move:4,attack:4,range:4,attributes:["%flying%","%shield% 3"]}},{level:4,normal:{health:3,move:3,attack:3,range:3,attributes:["%flying%","%shield% 3"]},elite:{health:4,move:4,attack:4,range:4,attributes:["%flying%","%shield% 4"]}},{level:5,normal:{health:4,move:3,attack:3,range:4,attributes:["%flying%","%shield% 3"]},elite:{health:6,move:4,attack:4,range:4,attributes:["%flying%","%shield% 4"]}},{level:6,normal:{health:4,move:3,attack:4,range:4,attributes:["%flying%","%shield% 3"]},elite:{health:7,move:4,attack:5,range:5,attributes:["%flying%","%shield% 4"]}},{level:7,normal:{health:6,move:3,attack:4,range:4,attributes:["%flying%","%shield% 3"]},elite:{health:9,move:4,attack:5,range:5,attributes:["%flying%","%shield% 4"]}}]},Lurker:{level:[{level:0,normal:{health:5,move:2,attack:2,range:0,attributes:["%target% 2"]},elite:{health:7,move:2,attack:3,range:0,attributes:["%target% 2","%shield% 1"]}},{level:1,normal:{health:7,move:2,attack:2,range:0,attributes:["%target% 2","%pierce% 1"]},elite:{health:9,move:2,attack:3,range:0,attributes:["%target% 2","%pierce% 1","%shield% 1"]}},{level:2,normal:{health:9,move:3,attack:2,range:0,attributes:["%target% 2","%pierce% 1"]},elite:{health:12,move:3,attack:3,range:0,attributes:["%target% 2","%pierce% 2","%shield% 1"]}},{level:3,normal:{health:10,move:3,attack:3,range:0,attributes:["%target% 2","%pierce% 2"]},elite:{health:14,move:3,attack:4,range:0,attributes:["%target% 2","%pierce% 2","%shield% 1"]}},{level:4,normal:{health:10,move:3,attack:3,range:0,attributes:["%target% 2","%pierce% 2","%shield% 1"]},elite:{health:14,move:3,attack:4,range:0,attributes:["%target% 2","%pierce% 3","%shield% 2"]}},{level:5,normal:{health:11,move:3,attack:4,range:0,attributes:["%target% 2","%pierce% 2","%shield% 1"]},elite:{health:15,move:3,attack:5,range:0,attributes:["%target% 2","%pierce% 3","%shield% 2"]}},{level:6,normal:{health:12,move:4,attack:4,range:0,attributes:["%target% 2","%pierce% 3","%shield% 1"]},elite:{health:16,move:4,attack:5,range:0,attributes:["%target% 2","%pierce% 4","%shield% 2"]}},{level:7,normal:{health:14,move:4,attack:4,range:0,attributes:["%target% 2","%pierce% 3","%shield% 1"]},elite:{health:18,move:4,attack:5,range:0,attributes:["%target% 2","%pierce% 4","%shield% 2"]}}]},Ooze:{level:[{level:0,normal:{health:4,move:1,attack:2,range:2,attributes:[]},elite:{health:8,move:1,attack:2,range:3,attributes:[]}},{level:1,normal:{health:5,move:1,attack:2,range:2,attributes:["%shield% 1"]},elite:{health:9,move:1,attack:2,range:3,attributes:["%shield% 1"]}},{level:2,normal:{health:7,move:1,attack:2,range:3,attributes:["%shield% 1"]},elite:{health:11,move:1,attack:3,range:3,attributes:["%shield% 1"]}},{level:3,normal:{health:8,move:1,attack:3,range:3,attributes:["%shield% 1"]},elite:{health:11,move:2,attack:3,range:4,attributes:["%poison%","%shield% 1"]}},{level:4,normal:{health:9,move:2,attack:3,range:3,attributes:["%shield% 1"]},elite:{health:13,move:2,attack:4,range:4,attributes:["%poison%","%shield% 1"]}},{level:5,normal:{health:10,move:2,attack:3,range:3,attributes:["%poison%","%shield% 1"]},elite:{health:15,move:3,attack:4,range:4,attributes:["%poison%","%shield% 1"]}},{level:6,normal:{health:12,move:2,attack:4,range:3,attributes:["%poison%","%shield% 1"]},elite:{health:16,move:3,attack:4,range:4,attributes:["%poison%","%shield% 2"]}},{level:7,normal:{health:14,move:2,attack:4,range:3,attributes:["%poison%","%shield% 1"]},elite:{health:18,move:3,attack:5,range:4,attributes:["%poison%","%shield% 2"]}}]},"Night Demon":{level:[{level:0,normal:{health:3,move:3,attack:3,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:5,move:4,attack:4,range:0,attributes:["Attackers gain Disadvantage"]}},{level:1,normal:{health:5,move:3,attack:3,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:8,move:4,attack:4,range:0,attributes:["Attackers gain Disadvantage"]}},{level:2,normal:{health:6,move:3,attack:4,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:11,move:4,attack:4,range:0,attributes:["Attackers gain Disadvantage"]}},{level:3,normal:{health:7,move:4,attack:4,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:13,move:4,attack:5,range:0,attributes:["Attackers gain Disadvantage"]}},{level:4,normal:{health:8,move:4,attack:5,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:15,move:5,attack:5,range:0,attributes:["Attackers gain Disadvantage"]}},{level:5,normal:{health:11,move:4,attack:5,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:17,move:5,attack:6,range:0,attributes:["Attackers gain Disadvantage"]}},{level:6,normal:{health:14,move:4,attack:5,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:21,move:5,attack:6,range:0,attributes:["Attackers gain Disadvantage"]}},{level:7,normal:{health:15,move:4,attack:6,range:0,attributes:["Attackers gain Disadvantage"]},elite:{health:21,move:5,attack:8,range:0,attributes:["Attackers gain Disadvantage"]}}]},"Rending Drake":{level:[{level:0,normal:{health:5,move:3,attack:3,range:0,attributes:[]},elite:{health:7,move:4,attack:4,range:0,attributes:[]}},{level:1,normal:{health:6,move:3,attack:3,range:0,attributes:["%wound%"]},elite:{health:7,move:4,attack:5,range:0,attributes:["%wound%"]}},{level:2,normal:{health:7,move:4,attack:3,range:0,attributes:["%wound%"]},elite:{health:9,move:5,attack:5,range:0,attributes:["%wound%"]}},{level:3,normal:{health:7,move:4,attack:4,range:0,attributes:["%wound%"]},elite:{health:10,move:5,attack:6,range:0,attributes:["%wound%"]}},{level:4,normal:{health:9,move:4,attack:4,range:0,attributes:["%wound%"]},elite:{health:11,move:6,attack:6,range:0,attributes:["%wound%"]}},{level:5,normal:{health:10,move:4,attack:5,range:0,attributes:["%wound%"]},elite:{health:14,move:6,attack:6,range:0,attributes:["%wound%"]}},{level:6,normal:{health:11,move:5,attack:5,range:0,attributes:["%wound%"]},elite:{health:15,move:6,attack:7,range:0,attributes:["%wound%"]}},{level:7,normal:{health:14,move:5,attack:5,range:0,attributes:["%wound%"]},elite:{health:18,move:6,attack:7,range:0,attributes:["%wound%"]}}]},"Savvas Icestorm":{level:[{level:0,normal:{health:7,move:2,attack:2,range:3,attributes:["%pierce% 3"]},elite:{health:12,move:2,attack:3,range:4,attributes:["%pierce% 3"]}},{level:1,normal:{health:10,move:2,attack:2,range:4,attributes:["%pierce% 3"]},elite:{health:12,move:2,attack:3,range:5,attributes:["%pierce% 3","%shield% 1"]}},{level:2,normal:{health:12,move:3,attack:2,range:4,attributes:["%pierce% 3"]},elite:{health:15,move:3,attack:3,range:5,attributes:["%pierce% 3","%shield% 1"]}},{level:3,normal:{health:12,move:3,attack:3,range:4,attributes:["%pierce% 3","%shield% 1"]},elite:{health:18,move:3,attack:4,range:6,attributes:["%pierce% 3","%shield% 1"]}},{level:4,normal:{health:14,move:3,attack:3,range:5,attributes:["%pierce% 3","%shield% 1"]},elite:{health:19,move:4,attack:4,range:6,attributes:["%pierce% 3","%shield% 2"]}},{level:5,normal:{health:16,move:3,attack:4,range:5,attributes:["%pierce% 3","%shield% 1"]},elite:{health:21,move:4,attack:5,range:6,attributes:["%pierce% 3","%shield% 2"]}},{level:6,normal:{health:16,move:3,attack:4,range:5,attributes:["%pierce% 3","%shield% 2"]},elite:{health:23,move:4,attack:6,range:6,attributes:["%pierce% 3","%shield% 2"]}},{level:7,normal:{health:17,move:4,attack:4,range:6,attributes:["%pierce% 3","%shield% 2"]},elite:{health:24,move:4,attack:6,range:6,attributes:["%pierce% 4","%shield% 3"]}}]},"Savvas Lavaflow":{level:[{level:0,normal:{health:8,move:3,attack:2,range:0,attributes:[]},elite:{health:13,move:3,attack:3,range:0,attributes:[]}},{level:1,normal:{health:9,move:3,attack:2,range:0,attributes:["%poison%"]},elite:{health:15,move:3,attack:3,range:0,attributes:["%wound%"]}},{level:2,normal:{health:11,move:3,attack:3,range:0,attributes:["%poison%"]},elite:{health:18,move:3,attack:3,range:0,attributes:["%poison%","%wound%"]}},{level:3,normal:{health:14,move:3,attack:3,range:0,attributes:["%poison%"]},elite:{health:21,move:3,attack:4,range:0,attributes:["%poison%","%wound%"]}},{level:4,normal:{health:16,move:3,attack:4,range:0,attributes:["%poison%"]},elite:{health:24,move:4,attack:4,range:0,attributes:["%poison%","%wound%"]}},{level:5,normal:{health:18,move:3,attack:4,range:0,attributes:["%poison%","%wound%"]},elite:{health:27,move:4,attack:5,range:0,attributes:["%poison%","%wound%"]}},{level:6,normal:{health:20,move:4,attack:4,range:0,attributes:["%poison%","%wound%"]},elite:{health:30,move:4,attack:6,range:0,attributes:["%poison%","%wound%"]}},{level:7,normal:{health:24,move:4,attack:4,range:0,attributes:["%poison%","%wound%"]},elite:{health:35,move:4,attack:6,range:0,attributes:["%poison%","%wound%"]}}]},"Spitting Drake":{level:[{level:0,normal:{health:5,move:3,attack:3,range:3,attributes:["%flying%"]},elite:{health:8,move:3,attack:4,range:4,attributes:["%flying%"]}},{level:1,normal:{health:6,move:3,attack:3,range:3,attributes:["%flying%"]},elite:{health:9,move:3,attack:4,range:4,attributes:["%flying%","%muddle%"]}},{level:2,normal:{health:8,move:3,attack:3,range:3,attributes:["%flying%","%muddle%"]},elite:{health:10,move:3,attack:5,range:4,attributes:["%flying%","%muddle%"]}},{level:3,normal:{health:8,move:3,attack:4,range:4,attributes:["%flying%","%muddle%"]},elite:{health:12,move:3,attack:5,range:5,attributes:["%flying%","%muddle%"]}},{level:4,normal:{health:9,move:4,attack:4,range:4,attributes:["%flying%","%muddle%"]},elite:{health:14,move:4,attack:5,range:5,attributes:["%flying%","%muddle%"]}},{level:5,normal:{health:12,move:4,attack:4,range:4,attributes:["%flying%","%muddle%"]},elite:{health:16,move:4,attack:6,range:5,attributes:["%flying%","%muddle%"]}},{level:6,normal:{health:13,move:4,attack:5,range:4,attributes:["%flying%","%muddle%"]},elite:{health:19,move:4,attack:6,range:5,attributes:["%flying%","%muddle%"]}},{level:7,normal:{health:16,move:4,attack:5,range:4,attributes:["%flying%","%muddle%"]},elite:{health:21,move:4,attack:7,range:5,attributes:["%flying%","%muddle%"]}}]},"Stone Golem":{level:[{level:0,normal:{health:10,move:1,attack:3,range:0,attributes:[]},elite:{health:10,move:2,attack:4,range:0,attributes:["%shield% 1"]}},{level:1,normal:{health:10,move:1,attack:3,range:0,attributes:["%shield% 1"]},elite:{health:11,move:2,attack:4,range:0,attributes:["%shield% 2"]}},{level:2,normal:{health:11,move:1,attack:4,range:0,attributes:["%shield% 1"]},elite:{health:14,move:2,attack:5,range:0,attributes:["%shield% 2"]}},{level:3,normal:{health:11,move:1,attack:4,range:0,attributes:["%shield% 2"]},elite:{health:15,move:2,attack:5,range:0,attributes:["%shield% 3"]}},{level:4,normal:{health:12,move:2,attack:4,range:0,attributes:["%shield% 2"]},elite:{health:17,move:2,attack:6,range:0,attributes:["%shield% 3"]}},{level:5,normal:{health:13,move:2,attack:5,range:0,attributes:["%shield% 2"]},elite:{health:19,move:3,attack:6,range:0,attributes:["%shield% 3"]}},{level:6,normal:{health:16,move:2,attack:5,range:0,attributes:["%shield% 2"]},elite:{health:20,move:3,attack:7,range:0,attributes:["%shield% 3"]}},{level:7,normal:{health:16,move:2,attack:5,range:0,attributes:["%shield% 3"]},elite:{health:21,move:3,attack:7,range:0,attributes:["%shield% 4"]}}]},"Sun Demon":{level:[{level:0,normal:{health:5,move:2,attack:2,range:0,attributes:["%flying%","Advantage","%shield% 1"]},elite:{health:9,move:2,attack:3,range:0,attributes:["%flying%","Advantage","%shield% 1"]}},{level:1,normal:{health:7,move:2,attack:2,range:0,attributes:["%flying%","Advantage","%shield% 1"]},elite:{health:12,move:2,attack:3,range:0,attributes:["%flying%","Advantage","%shield% 1"]}},{level:2,normal:{health:9,move:2,attack:2,range:0,attributes:["%flying%","Advantage","%shield% 1"]},elite:{health:13,move:2,attack:4,range:0,attributes:["%flying%","Advantage","%shield% 1"]}},{level:3,normal:{health:10,move:2,attack:3,range:0,attributes:["%flying%","Advantage","%shield% 1"]},elite:{health:15,move:3,attack:4,range:0,attributes:["%flying%","Advantage","%shield% 1"]}},{level:4,normal:{health:11,move:3,attack:3,range:0,attributes:["%flying%","Advantage","%shield% 1"]},elite:{health:16,move:3,attack:5,range:0,attributes:["%flying%","Advantage","%shield% 1"]}},{level:5,normal:{health:11,move:3,attack:3,range:0,attributes:["%flying%","Advantage","%shield% 2"]},elite:{health:16,move:3,attack:5,range:0,attributes:["%flying%","Advantage","%shield% 2"]}},{level:6,normal:{health:12,move:3,attack:4,range:0,attributes:["%flying%","Advantage","%shield% 2"]},elite:{health:18,move:4,attack:5,range:0,attributes:["%flying%","Advantage","%shield% 2"]}},{level:7,normal:{health:15,move:3,attack:4,range:0,attributes:["%flying%","Advantage","%shield% 2"]},elite:{health:22,move:4,attack:5,range:0,attributes:["%flying%","Advantage","%shield% 2"]}}]},"Vermling Scout":{level:[{level:0,normal:{health:2,move:3,attack:1,range:0,attributes:[]},elite:{health:4,move:3,attack:2,range:0,attributes:[]}},{level:1,normal:{health:3,move:3,attack:1,range:0,attributes:[]},elite:{health:5,move:3,attack:2,range:0,attributes:[]}},{level:2,normal:{health:3,move:3,attack:2,range:0,attributes:[]},elite:{health:5,move:4,attack:3,range:0,attributes:[]}},{level:3,normal:{health:5,move:3,attack:2,range:0,attributes:[]},elite:{health:7,move:4,attack:3,range:0,attributes:[]}},{level:4,normal:{health:6,move:3,attack:3,range:0,attributes:[]},elite:{health:8,move:4,attack:4,range:0,attributes:[]}},{level:5,normal:{health:8,move:3,attack:3,range:0,attributes:[]},elite:{health:11,move:4,attack:4,range:0,attributes:[]}},{level:6,normal:{health:9,move:4,attack:3,range:0,attributes:[]},elite:{health:12,move:5,attack:4,range:0,attributes:[]}},{level:7,normal:{health:11,move:4,attack:3,range:0,attributes:[]},elite:{health:15,move:5,attack:4,range:0,attributes:[]}}]},"Vermling Shaman":{level:[{level:0,normal:{health:2,move:2,attack:1,range:3,attributes:["%shield% 2"]},elite:{health:3,move:3,attack:2,range:3,attributes:["%shield% 2"]}},{level:1,normal:{health:2,move:2,attack:1,range:3,attributes:["%shield% 3"]},elite:{health:3,move:3,attack:2,range:3,attributes:["%shield% 3"]}},{level:2,normal:{health:3,move:2,attack:1,range:4,attributes:["%shield% 3"]},elite:{health:4,move:3,attack:2,range:4,attributes:["%shield% 3"]}},{level:3,normal:{health:3,move:2,attack:2,range:4,attributes:["%shield% 3"]},elite:{health:5,move:3,attack:3,range:4,attributes:["%shield% 3"]}},{level:4,normal:{health:3,move:3,attack:2,range:4,attributes:["%muddle%","%shield% 3"]},elite:{health:5,move:3,attack:3,range:4,attributes:["%muddle%","%shield% 4"]}},{level:5,normal:{health:4,move:3,attack:3,range:4,attributes:["%muddle%","%shield% 3"]},elite:{health:6,move:3,attack:4,range:4,attributes:["%muddle%","%shield% 4"]}},{level:6,normal:{health:5,move:3,attack:4,range:4,attributes:["%muddle%","%shield% 3"]},elite:{health:6,move:3,attack:4,range:4,attributes:["%muddle%","%shield% 5"]}},{level:7,normal:{health:7,move:3,attack:4,range:4,attributes:["%muddle%","%shield% 3"]},elite:{health:8,move:3,attack:4,range:4,attributes:["%muddle%","%shield% 5"]}}]},"Wind Demon":{level:[{level:0,normal:{health:3,move:3,attack:2,range:3,attributes:["%flying%","%shield% 1"]},elite:{health:5,move:4,attack:3,range:4,attributes:["%flying%","%shield% 1"]}},{level:1,normal:{health:3,move:3,attack:2,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:5,move:4,attack:3,range:4,attributes:["%flying%","%shield% 2"]}},{level:2,normal:{health:4,move:4,attack:2,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:7,move:5,attack:3,range:4,attributes:["%flying%","%shield% 2"]}},{level:3,normal:{health:5,move:4,attack:3,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:8,move:5,attack:4,range:4,attributes:["%flying%","%shield% 2"]}},{level:4,normal:{health:7,move:4,attack:3,range:3,attributes:["%flying%","%shield% 2"]},elite:{health:8,move:5,attack:4,range:4,attributes:["%flying%","%disarm%","%shield% 2"]}},{level:5,normal:{health:9,move:4,attack:3,range:4,attributes:["%flying%","%shield% 2"]},elite:{health:11,move:5,attack:4,range:4,attributes:["%flying%","%disarm%","%shield% 2"]}},{level:6,normal:{health:10,move:4,attack:3,range:4,attributes:["%flying%","%shield% 3"]},elite:{health:12,move:5,attack:4,range:4,attributes:["%flying%","%disarm%","%shield% 3"]}},{level:7,normal:{health:11,move:4,attack:4,range:4,attributes:["%flying%","%shield% 3"]},elite:{health:13,move:5,attack:5,range:4,attributes:["%flying%","%disarm%","%shield% 3"]}}]}},bosses:{"Bandit Commander":{level:[{level:0,health:"8xC",move:3,attack:3,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:1,health:"10xC",move:3,attack:3,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:2,health:"12xC",move:4,attack:3,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:3,health:"13xC",move:4,attack:4,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:4,health:"15xC",move:4,attack:4,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:5,health:"16xC",move:5,attack:5,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:6,health:"19xC",move:5,attack:5,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""},{level:7,health:"23xC",move:5,attack:5,range:0,special1:["Move to next door and reveal room"],special2:["Summon Living Bones"],immunities:["%stun%","%immobilize%","%curse%"],notes:""}]},"The Betrayer":{level:[{level:0,health:"10xC",move:3,attack:4,range:3,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:1,health:"12xC",move:3,attack:5,range:3,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:2,health:"14xC",move:3,attack:6,range:4,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:3,health:"16xC",move:4,attack:7,range:4,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:4,health:"18xC",move:4,attack:8,range:4,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:5,health:"20xC",move:5,attack:8,range:5,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:6,health:"23xC",move:5,attack:9,range:5,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""},{level:7,health:"27xC",move:5,attack:9,range:5,special1:["Summon Giant Viper and Fear"],special2:["Mind Control"],immunities:["%wound%","%poison%","%stun%","%disarm%","%curse%"],notes:""}]},"Captain of the Guard":{level:[{level:0,health:"7xC",move:2,attack:3,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:1,health:"9xC",move:2,attack:3,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:2,health:"11xC",move:2,attack:4,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:3,health:"14xC",move:3,attack:4,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:4,health:"16xC",move:3,attack:5,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:5,health:"20xC",move:3,attack:5,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:6,health:"21xC",move:4,attack:6,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""},{level:7,health:"25xC",move:4,attack:6,range:0,special1:["%heal% 2, Affect self and all allies"],special2:["All allies add +1 Attack to all attacks this round","%attack% +1"],immunities:["%disarm%","%wound%","%muddle%","%stun%"],notes:""}]},"The Colorless":{level:[{level:0,health:"9xC",move:3,attack:2,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 4, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:1,health:"10xC",move:3,attack:3,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 4, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:2,health:"11xC",move:4,attack:3,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 5, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:3,health:"12xC",move:4,attack:4,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 5, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:4,health:"14xC",move:4,attack:4,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 6, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:5,health:"15xC",move:4,attack:5,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 6, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:6,health:"17xC",move:4,attack:6,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 7, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""},{level:7,health:"19xC",move:5,attack:7,range:0,special1:["%dark%%use_element%: Summon Night Demon","%invisible%, Self"],special2:["%light%%use_element%: Summon Sun Demon","%heal% 7, Self","%shield% 1"],immunities:["%wound%","%poison%","%muddle%","%stun%","%disarm%"],notes:""}]},"Dark Rider":{level:[{level:0,health:"9xC",move:2,attack:"3+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:1,health:"10xC",move:3,attack:"3+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:2,health:"12xC",move:3,attack:"3+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:3,health:"13xC",move:3,attack:"4+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:4,health:"15xC",move:3,attack:"4+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:5,health:"16xC",move:3,attack:"5+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:6,health:"16xC",move:4,attack:"5+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"},{level:7,health:"18xC",move:4,attack:"6+X",range:0,special1:["%move% +2","%attack% +0"],special2:["%move% +0","Summon Imp","%attack% -1"],immunities:["%immobilize%","%poison%","%stun%","%disarm%"],notes:"X = Hexes moved"}]},"Elder Drake":{level:[{level:0,health:"11xC",move:0,attack:3,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:1,health:"12xC",move:0,attack:4,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:2,health:"15xC",move:0,attack:4,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:3,health:"16xC",move:0,attack:5,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:4,health:"20xC",move:0,attack:5,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:5,health:"22xC",move:0,attack:6,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:6,health:"27xC",move:0,attack:6,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""},{level:7,health:"29xC",move:0,attack:7,range:0,special1:["%attack% +0 %boss-aoe-elder-drake-sp1%"],special2:["Summon 2 Zephyrs and %move%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%stun%"],notes:""}]},"The Gloom":{level:[{level:0,health:"20xC",move:2,attack:5,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:1,health:"25xC",move:2,attack:5,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:2,health:"29xC",move:2,attack:6,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:3,health:"35xC",move:2,attack:6,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:4,health:"39xC",move:3,attack:7,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:5,health:"46xC",move:3,attack:7,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:6,health:"50xC",move:3,attack:8,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""},{level:7,health:"56xC",move:3,attack:9,range:0,special1:["%move% +9","%attack% +9"],special2:["Teleport","%attack% +1","%range% 5","%poison%","%wound%","%stun%"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%","%curse%"],notes:""}]},"Inox Bodyguard":{level:[{level:0,health:"6xC",move:2,attack:"C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 3"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:1,health:"7xC",move:2,attack:"1+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 3"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:2,health:"9xC",move:2,attack:"1+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 3"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:3,health:"10xC",move:3,attack:"2+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 4"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:4,health:"11xC",move:3,attack:"2+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 4"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:5,health:"13xC",move:3,attack:"3+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 5"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:6,health:"15xC",move:4,attack:"3+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 5"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"},{level:7,health:"17xC",move:4,attack:"4+C",range:0,special1:["%move% -1","%attack% -1 %boss-aoe-inox-bodyguard-sp1%"],special2:["%move% +0","%attack% +0","%retaliate% 5"],immunities:["%disarm%","%poison%","%muddle%","%stun%"],notes:"C = Number of Characters"}]},Jekserah:{level:[{level:0,health:"6xC",move:2,attack:2,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:1,health:"7xC",move:2,attack:3,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:2,health:"9xC",move:3,attack:3,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:3,health:"12xC",move:4,attack:4,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:4,health:"13xC",move:4,attack:5,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:5,health:"15xC",move:5,attack:5,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:6,health:"18xC",move:5,attack:5,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""},{level:7,health:"22xC",move:5,attack:5,range:0,special1:["Summon Living Bones","%attack% -1, Target all adjacent enemies"],special2:["Summon Living Corpse","%move% -1","%attack% +2"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:""}]},"Merciless Overseer":{level:[{level:0,health:"6xC",move:2,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:1,health:"8xC",move:2,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:2,health:"9xC",move:3,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:3,health:"11xC",move:3,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:4,health:"12xC",move:4,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:5,health:"14xC",move:4,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:6,health:"16xC",move:4,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"},{level:7,health:"19xC",move:4,attack:"V",range:0,special1:["All Scouts act again"],special2:["Summon Vermling Scout"],immunities:["%disarm%","%wound%","%curse%","%stun%"],notes:"V = Number of Scouts present"}]},"Prime Demon":{level:[{level:0,health:"8xC",move:3,attack:4,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:1,health:"9xC",move:4,attack:4,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:2,health:"10xC",move:4,attack:5,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:3,health:"12xC",move:4,attack:6,range:0,special1:["Throne moves","Summon Demon","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:4,health:"14xC",move:5,attack:6,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:5,health:"16xC",move:5,attack:7,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:6,health:"20xC",move:5,attack:7,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""},{level:7,health:"22xC",move:5,attack:8,range:0,special1:["Throne moves","Summon Demon (Special 1)","%move% +2","%attack% -1"],special2:["Throne moves","Summon Demon (Special 2)","%move% +2","%attack% -1"],immunities:["%wound%","%poison%","%disarm%","%immobilize%","%muddle%","%stun%"],notes:""}]},"The Sightless Eye":{level:[{level:0,health:"7xC",move:0,attack:5,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:1,health:"8xC",move:0,attack:6,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:2,health:"10xC",move:0,attack:6,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:3,health:"11xC",move:0,attack:7,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:4,health:"14xC",move:0,attack:7,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:5,health:"15xC",move:0,attack:8,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:6,health:"18xC",move:0,attack:8,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""},{level:7,health:"20xC",move:0,attack:9,range:3,special1:["Summon Deep Terror","%attack% -3 %boss-aoe-sightless-eye-sp1%"],special2:["Summon Deep Terror","%attack% -2 %boss-aoe-sightless-eye-sp2%"],immunities:["%stun%","%disarm%","%curse%","%muddle%"],notes:""}]},"Winged Horror":{level:[{level:0,health:"6xC",move:3,attack:3,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:1,health:"7xC",move:4,attack:3,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:2,health:"8xC",move:4,attack:4,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:3,health:"10xC",move:4,attack:4,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:4,health:"12xC",move:5,attack:4,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:5,health:"14xC",move:5,attack:5,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:6,health:"17xC",move:5,attack:5,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""},{level:7,health:"20xC",move:5,attack:5,range:0,special1:["%attack% -1, Target all adjacent enemies","%attack% +0, %range% 3","Hatch eggs"],special2:["Summon C eggs","%move% -1","%attack% +0"],immunities:["%disarm%","%poison%","%muddle%","%stun%","%curse%"],notes:""}]}}},o={living_corpse_two_levels_extra:{description:"All living corpses are two levels higher than the scenario level, up to a max of 7",affected_deck:"Living Corpse",extra_levels:2}},m=[{name:"#1 Black Barrow",decks:[{name:"Bandit Guard",deck_name:"Guard"},{name:"Bandit Archer",deck_name:"Archer"},{name:"Living Bones",deck_name:"Living Bones"}]},{name:"#2 Barrow Lair",decks:[{name:"Bandit Archer"},{name:"Boss: Bandit Commander"},{name:"Living Bones"},{name:"Living Corpse"}]},{name:"#3 Inox Encampment",decks:[{name:"Inox Guard"},{name:"Inox Archer"},{name:"Inox Shaman"}]},{name:"#4 Crypt of the Damned",decks:[{name:"Living Bones"},{name:"Bandit Archer"},{name:"Cultist"},{name:"Earth Demon"},{name:"Wind Demon"}]},{name:"#5 Ruinous Crypt",decks:[{name:"Cultist"},{name:"Living Bones"},{name:"Night Demon"},{name:"Flame Demon"},{name:"Frost Demon"}]},{name:"#6 Decaying Crypt",decks:[{name:"Living Bones"},{name:"Living Corpse"},{name:"Living Spirit"}]},{name:"#7 Vibrant Grotto",decks:[{name:"Forest Imp"},{name:"Cave Bear"},{name:"Inox Shaman"},{name:"Earth Demon"}]},{name:"#8 Gloomhaven Warehouse",decks:[{name:"Living Bones"},{name:"Living Corpse"},{name:"Boss: Inox Bodyguard"}]},{name:"#9 Diamond Mine",decks:[{name:"Hound"},{name:"Vermling Scout"},{name:"Boss: Merciless Overseer"}]},{name:"#10 Plane of Elemental Power",decks:[{name:"Flame Demon"},{name:"Earth Demon"},{name:"Sun Demon"}]},{name:"#11 Gloomhaven Square A",decks:[{name:"Living Bones"},{name:"Living Corpse"},{name:"City Guard"},{name:"City Archer"},{name:"Boss: Captain of the Guard"}]},{name:"#12 Gloomhaven Square B",decks:[{name:"Living Bones"},{name:"Living Corpse"},{name:"Cultist"},{name:"City Guard"},{name:"City Archer"},{name:"Boss: Jekserah"}]},{name:"#13 Temple of the Seer",decks:[{name:"Stone Golem"},{name:"Cave Bear"},{name:"Living Spirit"},{name:"Spitting Drake"}]},{name:"#14 Frozen Hollow",decks:[{name:"Hound"},{name:"Living Spirit"},{name:"Frost Demon"}]},{name:"#15 Shrine of Strength",decks:[{name:"Stone Golem"},{name:"Savvas Icestorm"},{name:"Frost Demon"},{name:"Wind Demon"},{name:"Harrower Infester"}]},{name:"#16 Mountain Pass",decks:[{name:"Earth Demon"},{name:"Wind Demon"},{name:"Inox Guard"},{name:"Inox Archer"}]},{name:"#17 Lost Island",decks:[{name:"Vermling Scout"},{name:"Vermling Shaman"},{name:"Cave Bear"}]},{name:"#18 Abandoned Sewers",decks:[{name:"Giant Viper"},{name:"Ooze"},{name:"Vermling Scout"}]},{name:"#19 Forgotten Crypt",decks:[{name:"Cultist"},{name:"Living Bones"},{name:"Living Spirit"},{name:"Living Corpse"}]},{name:"#20 Necromancer's Sanctum",decks:[{name:"Living Bones"},{name:"Cultist"},{name:"Night Demon"},{name:"Living Corpse"},{name:"Boss: Jekserah"}]},{name:"#21 Infernal Throne",decks:[{name:"Sun Demon"},{name:"Frost Demon"},{name:"Night Demon"},{name:"Wind Demon"},{name:"Earth Demon"},{name:"Flame Demon"},{name:"Boss: Prime Demon"}]},{name:"#22 Temple of the Elements",decks:[{name:"Living Bones"},{name:"Cultist"},{name:"Earth Demon"},{name:"Flame Demon"},{name:"Frost Demon"},{name:"Wind Demon"}]},{name:"#23 Deep Ruins",decks:[{name:"Stone Golem"},{name:"Ancient Artillery"},{name:"Living Bones"},{name:"Living Spirit"}]},{name:"#24 Echo Chamber",decks:[{name:"Rending Drake"},{name:"Ooze"},{name:"Living Spirit"}]},{name:"#25 Icecrag Ascent",decks:[{name:"Hound"},{name:"Rending Drake"},{name:"Spitting Drake"}]},{name:"#26 Ancient Cistern",decks:[{name:"Living Corpse"},{name:"Ooze"},{name:"Night Demon"},{name:"Black Imp"}]},{name:"#27 Ruinous Rift",decks:[{name:"Night Demon"},{name:"Wind Demon"},{name:"Frost Demon"},{name:"Sun Demon"},{name:"Earth Demon"},{name:"Flame Demon"}]},{name:"#28 Outer Ritual Chamber",decks:[{name:"Living Corpse"},{name:"Cultist"},{name:"Living Bones"},{name:"Night Demon"},{name:"Sun Demon"}],special_rules:[o.living_corpse_two_levels_extra]},{name:"#29 Sanctuary of Gloom",decks:[{name:"Living Bones"},{name:"Living Corpse"},{name:"Living Spirit"},{name:"Black Imp"}]},{name:"#30 Shrine of the Depths",decks:[{name:"Ooze"},{name:"Lurker"},{name:"Deep Terror"}]},{name:"#31 Plane of the Night",decks:[{name:"Deep Terror"},{name:"Night Demon"},{name:"Black Imp"}]},{name:"#32 Decrepit Wood",decks:[{name:"Harrower Infester"},{name:"Giant Viper"},{name:"Deep Terror"},{name:"Black Imp"}]},{name:"#33 Savvas Armory",decks:[{name:"Savvas Icestorm"},{name:"Savvas Lavaflow"},{name:"Frost Demon"},{name:"Flame Demon"},{name:"Wind Demon"},{name:"Earth Demon"}]},{name:"#34 Scorched Summit",decks:[{name:"Rending Drake"},{name:"Spitting Drake"},{name:"Boss: Elder Drake"}]},{name:"#35 Gloomhaven Battlements A",decks:[{name:"Flame Demon"},{name:"Frost Demon"},{name:"Earth Demon"},{name:"Wind Demon"},{name:"City Archer"},{name:"City Guard"},{name:"Boss: Captain of the Guard"}]},{name:"#36 Gloomhaven Battlements B",decks:[{name:"Flame Demon"},{name:"Frost Demon"},{name:"Earth Demon"},{name:"Wind Demon"},{name:"City Archer"},{name:"Boss: Prime Demon"}]},{name:"#37 Doom Trench",decks:[{name:"Lurker"},{name:"Deep Terror"},{name:"Harrower Infester"}]},{name:"#38 Slave Pens",decks:[{name:"Inox Guard"},{name:"Inox Archer"},{name:"Inox Shaman"},{name:"Stone Golem"}]},{name:"#39 Treacherous Divide",decks:[{name:"Cave Bear"},{name:"Frost Demon"},{name:"Spitting Drake"},{name:"Cultist"},{name:"Living Bones"}]},{name:"#40 Ancient Defense Network",decks:[{name:"Living Corpse"},{name:"Flame Demon"},{name:"Cave Bear"},{name:"Stone Golem"},{name:"Forest Imp"}]},{name:"#41 Timeworn Tomb",decks:[{name:"Ancient Artillery"},{name:"Living Corpse"},{name:"Living Spirit"},{name:"Stone Golem"}]},{name:"#42 Realm of the Voice",decks:[{name:"Night Demon"},{name:"Wind Demon"},{name:"Living Spirit"}]},{name:"#43 - Drake Nest",decks:[{name:"Flame Demon"},{name:"Rending Drake"},{name:"Spitting Drake"}]},{name:"#44 Tribal Assault",decks:[{name:"Inox Guard"},{name:"Inox Archer"},{name:"Hound"},{name:"Inox Shaman"}]},{name:"#45 Rebel Swamp",decks:[{name:"City Guard"},{name:"City Archer"},{name:"Hound"}]},{name:"#46 Nightmare Peak",decks:[{name:"Night Demon"},{name:"Frost Demon"},{name:"Wind Demon"},{name:"Savvas Icestorm"},{name:"Boss: Winged Horror"}]},{name:"#47 Lair of the Unseeing Eye",decks:[{name:"Lurker"},{name:"Deep Terror"},{name:"Harrower Infester"},{name:"Boss: The Sightless Eye"}]},{name:"#48 - Shadow Weald",decks:[{name:"Forest Imp"},{name:"Earth Demon"},{name:"Harrower Infester"},{name:"Boss: Dark Rider"}]},{name:"#49 Rebel's Stand",decks:[{name:"Giant Viper"},{name:"City Archer"},{name:"City Guard"},{name:"Ancient Artillery"}]},{name:"#50 Ghost Fortress",decks:[{name:"Night Demon"},{name:"Sun Demon"},{name:"Earth Demon"}]},{name:"#51 The Void",decks:[{name:"Boss: The Gloom"}]},{name:"#52 Noxious Cellar",decks:[{name:"Spitting Drake"},{name:"Ooze"},{name:"Vermling Scout"},{name:"Living Corpse"},{name:"Vermling Shaman"}]},{name:"#53 Crypt Basement",decks:[{name:"Ooze"},{name:"Living Corpse"},{name:"Living Spirit"},{name:"Living Bones"},{name:"Giant Viper"}]},{name:"#54 Palace of Ice",decks:[{name:"Cave Bear"},{name:"Living Spirit"},{name:"Frost Demon"},{name:"Harrower Infester"}]},{name:"#55 Foggy Thicket",decks:[]},{name:"#56 Bandit's Wood",decks:[{name:"Hound"},{name:"Bandit Archer"},{name:"Rending Drake"},{name:"Bandit Guard"}]},{name:"#57 Investigation",decks:[{name:"City Guard"},{name:"City Archer"},{name:"Hound"}]},{name:"#58 Bloody Shack",decks:[{name:"Earth Demon"},{name:"Harrower Infester"},{name:"Black Imp"},{name:"City Guard"}]},{name:"#59 Forgotten Grove",decks:[{name:"Cave Bear"},{name:"Hound"},{name:"Forest Imp"}]},{name:"#60 Alchemy Lab",decks:[{name:"Ooze"},{name:"Giant Viper"},{name:"Hound"},{name:"Rending Drake"},{name:"Spitting Drake"}]},{name:"#61 Fading Lighthouse",decks:[{name:"Ooze"},{name:"Giant Viper"},{name:"Frost Demon"},{name:"Flame Demon"}]},{name:"#62 Pit of Souls",decks:[{name:"Living Bones"},{name:"Living Spirit"}]},{name:"#63 Magma Pit",decks:[{name:"Vermling Scout"},{name:"Inox Guard"},{name:"Inox Archer"},{name:"Flame Demon"}]},{name:"#64 Underwater Lagoon",decks:[{name:"Ooze"},{name:"Forest Imp"},{name:"Rending Drake"}]},{name:"#65 Sulfur Mine",decks:[{name:"Vermling Scout"},{name:"Hound"},{name:"Inox Shaman"}]},{name:"#66 Clockwork Cove",decks:[{name:"Ooze"},{name:"Ancient Artillery"},{name:"Living Spirit"},{name:"Stone Golem"}]},{name:"#67 Arcane Library",decks:[{name:"Forest Imp"},{name:"Cave Bear"},{name:"Stone Golem"}]},{name:"#68 Toxic Moor",decks:[{name:"Rending Drake"},{name:"Black Imp"},{name:"Giant Viper"},{name:"Living Corpse"}]},{name:"#69 Well of the Unfortunate",decks:[{name:"Vermling Scout"},{name:"Vermling Shaman"},{name:"Forest Imp"},{name:"Stone Golem"},{name:"Living Spirit"}]},{name:"#70 Chained Isle",decks:[{name:"Night Demon"},{name:"Wind Demon"},{name:"Living Spirit"}]},{name:"#71 Windswept Highlands",decks:[{name:"Spitting Drake"},{name:"Wind Demon"},{name:"Sun Demon"}]},{name:"#72 Oozing Grove",decks:[{name:"Ooze"},{name:"Forest Imp"},{name:"Giant Viper"}]},{name:"#73 Rockslide Ridge",decks:[{name:"Hound"},{name:"Inox Archer"},{name:"Ancient Artillery"},{name:"Inox Guard"},{name:"Inox Shaman"}]},{name:"#74 Merchant Ship",decks:[{name:"Bandit Guard"},{name:"Bandit Archer"},{name:"Lurker"},{name:"Deep Terror"}]},{name:"#75 Overgrown Graveyard",decks:[{name:"Living Bones"},{name:"Living Corpse"},{name:"Living Spirit"}]},{name:"#76 Harrower Hive",decks:[{name:"Giant Viper"},{name:"Living Bones"},{name:"Night Demon"},{name:"Harrower Infester"}]},{name:"#77 Vault of Secrets",decks:[{name:"City Guard"},{name:"City Archer"},{name:"Stone Golem"},{name:"Hound"}]},{name:"#78 Sacrifice Pit",decks:[{name:"Bandit Guard"},{name:"Bandit Archer"},{name:"Cultist"},{name:"Living Bones"},{name:"Black Imp"}]},{name:"#79 Lost Temple",decks:[{name:"Stone Golem"},{name:"Giant Viper"},{name:"Boss: The Betrayer"}]},{name:"#80 Vigil Keep",decks:[{name:"City Guard"},{name:"City Archer"},{name:"Ancient Artillery"},{name:"Hound"}]},{name:"#81 Temple of the Eclipse",decks:[{name:"Night Demon"},{name:"Sun Demon"},{name:"Stone Golem"},{name:"Ancient Artillery"},{name:"Boss: The Colorless"}]},{name:"#82 Burning Mountain",decks:[{name:"Earth Demon"},{name:"Flame Demon"},{name:"Stone Golem"}]},{name:"#83 Shadows Within",decks:[{name:"Hound"},{name:"Cultist"},{name:"Living Bones"},{name:"Living Spirit"},{name:"Flame Demon"}]},{name:"#84 Crystalline Cave",decks:[{name:"Flame Demon"},{name:"Frost Demon"},{name:"Earth Demon"}]},{name:"#85 Sun Temple",decks:[{name:"Hound"},{name:"Black Imp"},{name:"Night Demon"},{name:"Sun Demon"}]},{name:"#86 Harried Village",decks:[{name:"Cave Bear"},{name:"Vermling Shaman"},{name:"Vermling Scout"},{name:"Lurker"}]},{name:"#87 Corrupted Cove",decks:[{name:"Lurker"},{name:"Deep Terror"},{name:"Ooze"},{name:"Black Imp"}]},{name:"#88 Plane of Water",decks:[{name:"Frost Demon"},{name:"Ooze"},{name:"Lurker"}]},{name:"#89 Syndicate Hideout",decks:[{name:"Bandit Archer"},{name:"Bandit Guard"},{name:"Cultist"},{name:"Giant Viper"}]},{name:"#90 Demonic Rift",decks:[{name:"Earth Demon"},{name:"Wind Demon"},{name:"Night Demon"},{name:"Living Spirit"}]},{name:"#91 Wild Melee",decks:[{name:"Cave Bear"},{name:"Hound"},{name:"Bandit Guard"},{name:"Bandit Archer"},{name:"Living Spirit"}]},{name:"#92 Back Alley Brawl",decks:[{name:"Bandit Guard"},{name:"City Guard"},{name:"Inox Guard"},{name:"Bandit Archer"},{name:"City Archer"},{name:"Savvas Lavaflow"},{name:"Flame Demon"},{name:"Earth Demon"}]},{name:"#93 Sunken Vessel",decks:[{name:"Lurker"},{name:"Frost Demon"},{name:"Living Spirit"}]},{name:"#94 Vermling Nest",decks:[{name:"Hound"},{name:"Vermling Scout"},{name:"Vermling Shaman"},{name:"Cave Bear"}]},{name:"#95 Payment Due",decks:[{name:"Deep Terror"},{name:"Flame Demon"},{name:"Earth Demon"},{name:"Savvas Lavaflow"}]}],c={"%air%":" ","%any%":" ","%aoe-4-with-black%":" ","%aoe-circle%":"","%aoe-circle-with-middle-black%":"","%aoe-circle-with-side-black%":" ","%aoe-line-3-with-black%":"","%aoe-line-4-with-black%":"","%aoe-line-6-with-black%":" ","%aoe-triangle-2-side%":"
","%aoe-triangle-2-side-with-black%":"
","%aoe-triangle-3-side-with-corner-black%":"
","%attack%":"
Attack ","%bless%":"
BLESS ","%boss-aoe-elder-drake-sp1%":"
","%boss-aoe-inox-bodyguard-sp1%":"
","%boss-aoe-sightless-eye-sp1%":"
","%boss-aoe-sightless-eye-sp2%":"
","%curse%":"
CURSE ","%dark%":"
","%disarm%":"
DISARM ","%earth%":"
","%fire%":"
","%heal%":"
Heal ","%ice%":"
","%immobilize%":"
IMMOBILIZE ","%invisible%":"
INVISIBLE ","%jump%":"
Jump ","%light%":"
","%loot%":"
Loot ","%move%":"
Move ","%muddle%":"
MUDDLE ","%pierce%":"
PIERCE ","%poison%":"
POISON ","%pull%":"
PULL ","%push%":"
PUSH ","%range%":"
Range ","%retaliate%":"
Retaliate ","%shield%":"
Shield ","%flying%":"
","%strengthen%":"
STRENGTHEN ","%stun%":"
STUN ","%target%":"
Target ","%use_element%":"
","%wound%":"
WOUND "};function h(e){const a=e.toLowerCase();return a in c?c[a]:e}function u(e,a,t){let n=new RegExp("%"+a+"% (\\+|-)(\\d*)","g");const l=n.exec(e),i=2===t.length;let s=t[0],r="";const o=(n=new RegExp("(\\d*)([+\\-])?([a-zA-Z]+)","i")).exec(String(s));if(o&&o[3]){const e="-"===o[2]?"-":"+";r=o[3]+e,s=""!==o[1]?parseInt(o[1]):0}if(l){if("+"===l[1]){const e=s+parseInt(l[2]);if(i){return"%"+a+"% "+e+" /
"+(t[1]+parseInt(l[2]))+" "}return"%"+a+"% "+r+e}if("-"===l[1]){const e=s-parseInt(l[2]);if(i){return"%"+a+"% "+e+" /
"+(t[1]-parseInt(l[2]))+" "}return"%"+a+"% "+r+e}}return e}function d(e){if(!e||0===e[0].length&&0===e[1].length)return[];{let a=["* Attributes"];const t=[];let n=0;for(let a=0;a
"+e.replace(/(,\s$)/g,"")+"":""})))}}function v(e){if(e){const a=[];let t=0;for(let n=0;n"+e.replace(/(,\s$)/g,"")+""})))}return[]}function g(e){return["* Notes: "+e+" "]}function k(e,a){return a.map((function(e){return"* "+e}))}function p(e,a,t){return a&&-1!==e.indexOf("Special 1")&&(e=k(0,a)),a&&-1!==e.indexOf("Special 2")&&(e=k(0,t)),e}function b(e,a,t,n){const l=new RegExp("%(attack|move|range)% ([+\\-])(\\d*)","g");let i=l.exec(e);for(;i;)"attack"===i[1]?e=e.replace(i[0],u(i[0],"attack",a)):"move"===i[1]?e=e.replace(i[0],u(i[0],"move",t)):"range"===i[1]&&(e=e.replace(i[0],u(i[0],"range",n))),i=l.exec(e);return e.replace(/%[^%]*%/gi,h)}function f(e,a,t){for(let a in e)e[a].className=a===t?"":"inactive";for(let e in a)a[e].className=e===t?"tabbody":"inactive tabbody"}function S(e,a,t){e.className=t?"pane":"pane inactive",a.style.display=t?"initial":"none"}const _={};function C(e,a,t){t?e.classList.add(a):e.classList.remove(a)}function y(e,a,t,n){const l=document.createElement("input");l.type=e,l.name=a,l.value=t;const i=document.createTextNode(n),s=document.createElement("label");return s.appendChild(l),s.appendChild(i),{root:s,input:l}}function D(e){const a=[];for(let t in e)a.push(e[t]);return a}function w(e){return"checked"in e&&e.checked}function x(e){return"value"in e?e.value:""}function L(e,a){try{localStorage.setItem(e,a)}catch(e){console.error("Local storage is required")}}function A(e){try{return localStorage.getItem(e)}catch(e){console.error("Local storage is required")}}function E(e,a){for(let t=0;t Create a 3 damage trap in an adjacent empty hex closest to an enemy "],[!0,"29","* %move% +0","* %attack% -1","** %range% +1","** %immobilize%"]]},{class:"Boss",cards:[[!1,"11","* Special 2"],[!1,"14","* Special 2"],[!0,"17","* Special 2"],[!0,"85","* Special 1"],[!1,"79","* Special 1"],[!1,"73","* Special 1"],[!1,"36","* %move% +0","* %attack% +0"],[!1,"52","* %move% -1","* %attack% -1","** %range% 3","** %target% 2"]]},{class:"Cave Bear",cards:[[!1,"13","* %move% +1","* %attack% -1"],[!1,"14","* %move% -1","* %attack% -1","** %immobilize%"],[!0,"34","* %attack% +1","** %wound%"],[!1,"41","* %move% +0","* %attack% +0"],[!1,"60","* %move% -1","* %attack% +1"],[!0,"80","* %attack% -1","* %move% -2","* %attack% -1","** %wound%"],[!1,"61","* %move% +0","* %attack% -1","** %target% 2"],[!1,"03","* %shield% 1","* %retaliate% 2","* %heal% 2","** Self"]]},{class:"Cultist",cards:[[!1,"10","* %move% -1","* %attack% -1","* On Death:","** %attack% +2 %aoe-circle-with-middle-black%"],[!1,"10","* %move% -1","* %attack% -1","* On Death:","** %attack% +2 %aoe-circle-with-middle-black%"],[!1,"27","* %move% +0","* %attack% +0"],[!1,"27","* %move% +0","* %attack% +0"],[!1,"39","* %move% -1","* %attack% +0","* %heal% 1","** Self"],[!0,"63","* Summon normal Living Bones","* Cultist suffers 2 damage."],[!0,"63","* Summon normal Living Bones","* Cultist suffers 2 damage."],[!1,"31","* %move% -1","* %heal% 3","** %range% 3"]]},{class:"Deep Terror",cards:[[!1,"65","* %attack% +0","** %range% 3","** %target% 3","** %curse%"],[!0,"60","* %attack% +0 %aoe-line-6-with-black%","** %pierce% 3"],[!0,"60","* %attack% +0 %aoe-line-6-with-black%","** %pierce% 3"],[!1,"84","* %attack% -1","** Target all adjacent enemies","* %attack% +0","** %range% 4","** %wound%"],[!1,"75","* %attack% +0","** %poison%","* %attack% -1","** %range% 5","** %immobilize%"],[!1,"75","* %attack% -2","** Target all adjacent enemies","** %disarm%","* %attack% +0","** %range% 3","** %target% 2"],[!1,"96","* %attack% -2","** %range% 6","** Summon normal Deep Terror in a hex adjacent to the target"],[!1,"54","* %wound% and %poison%","** Target all adjacent enemies","* %attack% +0","** %range% 4"]]},{class:"Earth Demon",cards:[[!0,"40","* %heal% 3","** Self","* %earth%%use_element%: %immobilize% Target all enemies within %range% 3 "],[!0,"42","* %move% +1","* %attack% -1"],[!1,"62","* %move% +0","* %attack% +0","* %earth%"],[!1,"71","* %attack% +0","** %range% 4","** %earth%%use_element%: %target% 2"],[!1,"83","* %move% -1","* %attack% +1","* %earth%"],[!1,"93","* %move% -1","* %attack% -1","** Target all adjacent enemies","* %earth%%use_element%: %push% 1"],[!1,"79","* %move% +1","* %attack% +0","** %air%%use_element%: -2 %attack%"],[!1,"87","* %move% +0","* %attack% -1 %aoe-4-with-black%
","* %any%%use_element%: %earth%"]]},{class:"Flame Demon",cards:[[!1,"03","* %move% +1","* %attack% -1","** %range% +0","* %fire%"],[!1,"24","* %move% +0","* %attack% +0","** %range% +0","* %fire%"],[!0,"46","* %attack% +0","** %range% +0","** %fire%%use_element%: %aoe-circle%"],[!1,"49","* %attack% +0 %aoe-line-3-with-black%","** %fire%%use_element%: +1 %attack% %wound%
"],[!1,"67","* %move% -1","* %attack% +1","** %range% -1","* %fire%"],[!1,"77","* %attack% +0","** Target all adjacent enemies","** %ice%%use_element%:Flame Demon suffers 1 damage."],[!0,"30","* %fire%%use_element%: All adjacent enemies suffer 2 damage.
","* %move% +0","* %attack% -2","** %range% +0","** %wound%","** %target% 2"],[!1,"08","* %move% -1","* Create a 4 damage trap in an adjacent empty hex closest to an enemy ","* %any%%use_element%: %fire%"]]},{class:"Frost Demon",cards:[[!1,"18","* %immobilize%","** Target all enemies within %range% 2","* %ice%%use_element%: %heal% 3 Self "],[!1,"38","* %move% +1","* %attack% -1"],[!1,"58","* %move% +0","* %attack% +0"],[!1,"58","* %move% -1","* %attack% +0","** %range% 2","** %ice%%use_element%: +2 %attack%, +1 %range%"],[!0,"78","* %move% -1","* %attack% +0 %aoe-triangle-2-side-with-black%","* %ice%"],[!0,"78","* %move% -1","* %attack% +0 %aoe-triangle-2-side-with-black%","* %ice%"],[!1,"58","* %move% -1","* %attack% -1","** %pierce% 3","* %any%%use_element%: %ice%"],[!1,"18","* %shield% 2","* %move% +1","* %fire%%use_element%: Frost Demon suffers 1 damage "]]},{class:"Giant Viper",cards:[[!0,"32","* %move% +0","* %attack% +0","** Add +2 Attack if the target is adjacent to any of the Giant Viper's allies."],[!0,"32","* %move% +0","* %attack% +0","** Add +2 Attack if the target is adjacent to any of the Giant Viper's allies."],[!1,"11","* %shield% 1","* %attack% -1"],[!1,"43","* %move% +1","** %jump%","* %attack% -1","** Target all adjacent enemies."],[!1,"58","* %move% -1","* %attack% +1"],[!1,"58","* %move% +1","** %jump%","* %attack% -1","** All attacks targeting Giant Viper this round gain Disadvantage."],[!1,"43","* %move% -1","** %jump%","* %attack% +0","** %target% 2"],[!1,"23","* %move% -1","* %attack% -1","** %immobilize%","* %attack% -1"]]},{class:"Guard",cards:[[!0,"15","* %shield% 1","* %retaliate% 2"],[!1,"30","* %move% +1","* %attack% -1"],[!1,"35","* %move% -1","* %attack% +0","** %range% 2"],[!1,"50","* %move% +0","* %attack% +0"],[!1,"50","* %move% +0","* %attack% +0"],[!1,"70","* %move% -1","* %attack% +1"],[!1,"55","* %move% -1","* %attack% +0","* %strengthen%","** Self"],[!0,"15","* %shield% 1","* %attack% +0","** %poison%"]]},{class:"Harrower Infester",cards:[[!1,"38","* %move% -1","* %attack% +1","** %target% 2"],[!1,"07","* %move% +0","* %attack% -1","** %poison%","* %dark%"],[!1,"16","* %move% -1","* %attack% -1","* %heal% 5","** Self"],[!1,"16","* %attack% +2","** %immobilize%","* %retaliate% 2"],[!0,"02","* %shield% 2","* %retaliate% 2","** %range% 3"],[!1,"30","* %move% -1","* %attack% +0 %aoe-line-4-with-black%",'** %dark%%use_element%: Perform "%heal% 2, Self" for each target damaged'],[!1,"38","* %move% +0","* %attack% -1","** %target% 2","** %dark%%use_element%: +2 %attack%, %disarm%"],[!0,"07","* %attack% -1","** %range% 3","** %muddle%","* %heal% 4","** Self"]]},{class:"Hound",cards:[[!1,"06","* %move% -1","* %attack% +0","** %immobilize%"],[!1,"07","* %move% +0","* %muddle%","** Target all adjacent enemies"],[!0,"19","* %move% +1","* %attack% +0","** Add +2 Attack if the target is adjacent to any of the Hound's allies"],[!0,"19","* %move% +1","* %attack% +0","** Add +2 Attack if the target is adjacent to any of the Hound's allies"],[!1,"26","* %move% +0","* %attack% +0"],[!1,"26","* %move% +0","* %attack% +0"],[!1,"83","* %move% -2","* %attack% +1"],[!1,"72","* %attack% -1","** %pierce% 2","* %move% -2","* %attack% -1","** %pierce% 2"]]},{class:"Imp",cards:[[!1,"05","* %shield% 5","* %heal% 1","** Self"],[!1,"37","* %move% +0","* %attack% +0","** %range% +0"],[!1,"37","* %move% +0","* %attack% +0","** %range% +0"],[!1,"42","* %move% +1","* %heal% 2","** %range% 3"],[!0,"43","* %move% +0","* %attack% -1","** %range% +0, %target% 2, %poison%"],[!1,"76","* %move% -1","* %attack% +1","** %range% +0"],[!0,"43","* %move% +0","* %attack% -1","** %range% +0, %target% 2, %curse%"],[!1,"24","* %strengthen%","** Affect all allies within %range% 2","* %muddle%","** Target all enemies within %range% 2"]]},{class:"Living Bones",cards:[[!1,"64","* %move% -1","* %attack% +1"],[!0,"20","* %move% -2","* %attack% +0","* %heal% 2","** Self"],[!1,"25","* %move% +1","* %attack% -1"],[!1,"45","* %move% +0","* %attack% +0"],[!1,"45","* %move% +0","* %attack% +0"],[!1,"81","* %attack% +2"],[!1,"74","* %move% +0","* %attack% +0","** Target one enemy with all attacks"],[!0,"12","* %shield% 1","* %heal% 2","** Self"]]},{class:"Living Corpse",cards:[[!1,"21","* %move% +1","* %muddle% and %immobilize%","** Target one adjacent enemy"],[!1,"47","* %move% +1","* %attack% -1"],[!0,"66","* %move% +0","* %attack% +0"],[!0,"66","* %move% +0","* %attack% +0"],[!1,"82","* %move% -1","* %attack% +1"],[!1,"91","* %move% +1","* Living Corpse suffers 1 damage."],[!1,"71","* %move% +0","* %attack% +1","* %poison%","** Target all adjacent enemies"],[!1,"32","* %attack% +2","** %push% 1","* Living Corpse suffers 1 damage."]]},{class:"Living Spirit",cards:[[!0,"22","* %move% -1","* %attack% -1","** %range% +0","** %muddle%"],[!0,"33","* %move% +0","* %attack% -1","** %range% +0","** Target all enemies within range"],[!1,"48","* %move% +0","* %attack% +0","** %range% +0"],[!1,"48","* %move% +0","* %attack% +0","** %range% +0"],[!1,"61","* %attack% +0","** %range% -1","** %target% 2"],[!1,"75","* %move% -1","* %attack% +1","** %range% -1","* %heal% 1","** Self"],[!1,"55","* %move% +0","* %curse%","** %range% +0","** Target all enemies within range","* %ice%"],[!1,"67","* %move% -1","* %attack% +1","** %range% +0","** %ice%%use_element%: %stun%"]]},{class:"Lurker",cards:[[!0,"11","* %shield% 1","** %ice%%use_element%: %shield% 2 instead","* %wound%","** Target all adjacent enemies"],[!1,"28","* %move% +1","* %attack% -1"],[!1,"38","* %move% +0","* %attack% +0"],[!1,"38","* %move% +0","* %attack% +0","** Target one enemy with all attacks"],[!1,"61","* %move% -1","* %attack% +1"],[!1,"64","* %attack% +1","** Target all adjacent enemies"],[!1,"41","* %ice%%use_element%: %strengthen%","** Self","* %move% +0","* %attack% -1","** %wound%"],[!0,"23","* %shield% 1","* %move% +0","* %attack% -1","* %ice%"]]},{class:"Night Demon",cards:[[!1,"04","* %move% +1","* %attack% -1","* %dark%"],[!1,"07","* %move% +1","* %attack% -1","* %dark%%use_element%: %invisible%","** Self"],[!1,"22","* %move% +0","* %attack% +0","* %dark%"],[!1,"26","* %attack% -2","** %range% 3","** %target% 3","** %dark%%use_element%: %muddle%"],[!0,"46","* %move% -1","* %attack% +1","** %dark%%use_element%: +2 %attack%"],[!0,"41","* %move% -1","* %attack% +1","* %dark%"],[!1,"35","* %attack% -1","* %attack% -1","** %pierce% 2","* %light%%use_element%: %curse%","** Self"],[!1,"15","* %move% +0","* %attack% -1","* All adjacent enemies and allies suffer 1 damage. ","* %any%%use_element%: %dark% "]]},{class:"Ooze",cards:[[!1,"36","* %move% +1","* %attack% -1","** %range% +0"],[!1,"57","* %move% +0","* %attack% +0","** %range% +0"],[!1,"59","* %attack% +0","** %range% +0","** %target% 2","** %poison%"],[!1,"66","* %move% -1","* %attack% +1","** %range% +1"],[!0,"94","* Ooze suffers 2 damage ","** Summons normal Ooze with a hit point value equal to the summoning Ooze's current hit point value (limited by a normal Ooze's specified maximum hit point value) "],[!0,"94","* Ooze suffers 2 damage ","** Summons normal Ooze with a hit point value equal to the summoning Ooze's current hit point value (limited by a normal Ooze's specified maximum hit point value) "],[!1,"85","* %push% 1 and","* %poison%","** Target all adjacent enemies","* %attack% +1","** %range% -1"],[!1,"66","* %move% -1","* %loot% 1","* %heal% 2","** Self"]]},{class:"Rending Drake",cards:[[!1,"12","* %move% +1","* %attack% -1"],[!0,"13","* %attack% -1","* %move% -1","* %attack% -1"],[!1,"25","* %move% +0","* %attack% +0"],[!1,"39","* %move% -1","* %attack% +1"],[!1,"54","* %move% -2","* %attack% -1","** %range% 3","** %target% 2","** %poison%"],[!1,"59","* %move% -2","* %attack% +1","** %target% 2"],[!1,"06","* %shield% 2","* %heal% 2","** Self","* %strengthen%","** Self"],[!0,"72","* %attack% -1","* %attack% -1","* %attack% -2"]]},{class:"Savvas Icestorm",cards:[[!1,"70","* %push% 2","** Target all adjacent enemies","** %air%%use_element%: %push% 4 instead","* %attack% +1","** %range% +1"],[!1,"98","* Summon normal Wind Demon","* %air%"],[!1,"98","* Summon normal Frost Demon","* %ice%"],[!1,"19","* %move% +0","* %attack% -1","** %range% -1","* %shield% 1","** Affect self and all allies within %range% 2","* %ice%"],[!1,"14","* %attack% +0","** %range% +0","** %ice%%use_element%: +2 %attack%, %immobilize%","* %retaliate% 2","* %air%"],[!1,"14","* %shield% 4","* %heal% 2","** %range% 3","** %ice%%use_element%: +3 %heal%","* %air%%use_element%: %attack% +0"],[!0,"47","* %disarm%","** Target all adjacent enemies","* %move% +0","* %attack% -1","** %range% +0","* %air%"],[!0,"35","* %move% -1","* %attack% -1 %aoe-triangle-3-side-with-corner-black% ","* %ice%"]]},{class:"Savvas Lavaflow",cards:[[!1,"97","* Summon normal Flame Demon","* %fire%"],[!1,"97","* Summon normal Earth Demon","* %earth%"],[!1,"22","* %move% +1","* %attack% -1","** Target all adjacent enemies","* %fire%%use_element%: %retaliate% 3"],[!0,"68","* %move% -1","* %attack% +1","** %range% 3","** All allies and enemies adjacent to the target suffer 2 damage.","* %earth%"],[!1,"41","* %move% +0","* %attack% -1 %aoe-line-4-with-black% ","** %earth%%use_element%: +2 %attack%, %immobilize%"],[!1,"51","* All enemies suffer 2 damage.","* %fire%%use_element%: %wound% all enemies","* %earth%%use_element%: %disarm% all enemies"],[!1,"31","* %heal% 4","** %range% 3","** %earth%%use_element%: %target% 3"],[!0,"68","* %move% -1","* %attack% -1","** %range% 3","** %target% 2","* %fire%"]]},{class:"Scout",cards:[[!1,"29","* %move% -1","* %attack% -1","** %range% 3"],[!1,"40","* %move% +1","* %attack% -1"],[!1,"53","* %move% +0","* %attack% +0"],[!1,"54","* %move% -2","* %attack% +0","** %range% 3","** %poison%"],[!1,"69","* %move% -1","* %attack% +1"],[!0,"92","* %attack% +2","** %poison% "],[!0,"35","* %move% +1","** %jump%","* %loot% 1"],[!1,"79","* %attack% -1","** %range% 4","** %target% 2"]]},{class:"Shaman",cards:[[!1,"08","* %move% +0","* %attack% -1","** %range% +0","** %disarm%"],[!1,"08","* %move% -1","* %attack% +0","** %range% +0","** %immobilize%"],[!0,"23","* %move% +0","* %heal% 3","** %range% 3"],[!0,"23","* %move% +0","* %heal% 3","** %range% 3"],[!1,"62","* %move% +0","* %attack% +0","** %range% +0"],[!1,"74","* %move% -1","* %attack% +1","** %range% +0"],[!1,"89","* %move% -1","* %heal% 1","** Affect all adjacent allies","* %bless%","** Self"],[!1,"09","* %move% +1","* %attack% -1","** %range% +0, %curse%, %target% 2"]]},{class:"Spitting Drake",cards:[[!1,"32","* %move% +1","* %attack% -1","** %range% +0"],[!1,"52","* %move% +0","* %attack% +0","** %range% +0"],[!0,"57","* %move% +0","* %attack% -1 %aoe-triangle-2-side%","** %range% +0"],[!1,"27","* %attack% +0","** %range% +0, %target% 2, %poison%"],[!1,"87","* %move% -1","* %attack% +1","** %range% +0"],[!1,"89","* %attack% -2","** %range% +0","** %stun%"],[!1,"06","* %shield% 2","* %heal% 2","** Self","* %strengthen%","** Self"],[!0,"89","* %move% -1","* %attack% -2 %aoe-circle%","** %range% +0","** %poison%"]]},{class:"Stone Golem",cards:[[!1,"11","* %retaliate% 3","** %range% 3"],[!1,"28","* %move% +1","* %attack% +0","* Stone Golem suffers 1 damage."],[!0,"51","* %move% +1","* %attack% -1"],[!1,"65","* %move% +0","* %attack% +0"],[!1,"72","* %attack% +1","** %range% 3","* Stone Golem suffers 2 damage"],[!0,"90","* %move% -1","* %attack% +1"],[!1,"28","* %move% +1","* %attack% -2","** %range% 3","** %pull% 2","** %immobilize%"],[!1,"83","* %move% +0","* %attack% -1","** Target all adjacent enemies"]]},{class:"Sun Demon",cards:[[!0,"17","* %heal% 3","** %range% 3","** %light%%use_element%: Target all allies within range instead"],[!1,"36","* %move% +0","* %attack% +0","** Target all adjacent enemies","* %light%"],[!1,"36","* %move% +0","* %attack% +0","** Target all adjacent enemies","* %light%"],[!1,"68","* %move% +0","* %attack% +1","* %light%"],[!0,"73","* %move% +0","* %attack% +1","* %light%%use_element%: %heal% 3","** Self"],[!1,"95","* %move% -1","* %attack% +0","** %range% 4","** %light%%use_element%: Target all enemies within range"],[!1,"88","* %move% -1","* %attack% -1","** Target all adjacent enemies","* %dark%%use_element%: %muddle%","** Self"],[!1,"50","* %move% +0","* %attack% +0","** %range% 3","* %any%%use_element%: %light%"]]},{class:"Wind Demon",cards:[[!1,"09","* %attack% -1","** %range% +0","* %heal% 1","** Self","* %air%%use_element%: %invisible%Self "],[!0,"21","* %move% +0","* %attack% +0","** %range% +0, %pull% 1","* %air%"],[!0,"21","* %move% +0","* %attack% +0","** %range% +0, %pull% 1","* %air%"],[!1,"29","* %move% +0","* %attack% -1","** %range% +0, %target% 2","** %air%%use_element%: %push% 2"],[!1,"37","* %move% +0","* %attack% +0 %aoe-4-with-black%
","** %air%%use_element%: +1 Attack %aoe-circle-with-side-black%
"],[!1,"43","* %move% -1","* %attack% +1","** %range% +0","** %air%%use_element%: %target% 2"],[!1,"43","* %push% 1","** Target all adjacent enemies","* %attack% +0","** %range% +0","** %earth%%use_element%: -2 %range%"],[!1,"02","* %shield% 1","* %move% -1","* %attack% -1","** %range% +0","* %any%%use_element%: %air%"]]}]),z={MODIFIER:"modifier",ABILITY:"ability",BOSS:"boss"},G={MODIFIER_CARD_DRAWN:"modifierCardDrawn",MODIFIER_DECK_SHUFFLE_REQUIRED:"modfierDeckShuffleRequired"};function F(e,a){const t={};return t.back=a,t.front=e,t.flip_up=function(e){C(this.back,"up",!e),C(this.back,"down",e),C(this.front,"up",e),C(this.front,"down",!e)},t.set_depth=function(e){e=e.toString(),this.back.style.zIndex=e,this.front.style.zIndex=e},t.push_down=function(){const e=parseInt(this.back.style.zIndex,10),a=parseInt(this.front.style.zIndex,10);this.back.style.zIndex=(e-1).toString(),this.front.style.zIndex=(a-1).toString()},t.addClass=function(e){this.front.classList.add(e),this.back.classList.add(e)},t.removeClass=function(e){this.front.classList.remove(e),this.back.classList.remove(e)},t.attach=function(e){e.appendChild(this.back),e.appendChild(this.front)},t.flip_up(!1),t}function O(e,a){const t=document.createElement("div");t.className="card ability back down";const n=document.createElement("span");return n.className="name",n.innerText=e+"-"+a,t.appendChild(n),t}function V(e,a,t,n,l,i,s,r,o){const m=document.createElement("div");m.className="card ability front down";const c=document.createElement("span");c.className="name",c.innerText=a+"-"+r,m.appendChild(c);const h=document.createElement("span");if(h.className="healthNormal",h.innerText="HP "+o[0],m.appendChild(h),o[1]>0){const e=document.createElement("span");e.className="healthElite",e.innerText="HP "+o[1],m.appendChild(e)}const u=document.createElement("span");if(u.className="initiative",u.innerText=e,m.appendChild(u),t){const e=document.createElement("img");e.src="images/shuffle.svg",m.appendChild(e)}let d=0,v=m;n=n.filter(Boolean);for(let e=0;e=0;)t+=1,a=a.substr(1);const r=t-d;for(;d!==t;)if(r>0){const e=document.createElement("ul");n.length>5&&(e.style.fontSize=100-2.5*n.length+"%"),v.appendChild(e),v=e;const a=document.createElement("li");v.appendChild(a),v=a,d+=1}else v=(v=v.parentElement).parentElement,d-=1;if(d>0&&r<=0){v=v.parentElement;const e=document.createElement("li");v.appendChild(e),v=e}const o=b(a.trim(),l,i,s);v.insertAdjacentHTML("beforeend",o)}return m}function j(e,a,t){const l=N[e];l.name=a,l.level=t;const i=JSON.parse(A(a)),s={class:l.class,name:l.name,type:z.ABILITY,draw_pile:[],discard:[],move:[0,0],attack:[0,0],range:[0,0],level:l.level,health:[0,0]};for(let e=0;e0){const e=this.discard[this.discard.length-1];let a=e.starting_lines,t=[];if(this.is_boss()){let e=[];a.forEach((function(a){e=e.concat(p(a,s.special1,s.special2))})),a=e,this.immunities&&(t=t.concat(v(this.immunities))),this.notes&&(t=t.concat(g(this.notes)))}else this.attributes&&(t=t.concat(d(this.attributes)));e.paint_front_card(this.get_real_name(),a.concat(t),this.attack,this.move,this.range,this.level,this.health),e.ui.set_depth(-3),e.ui.addClass("pull"),e.ui.flip_up(!0),e.ui.removeClass("draw"),e.ui.addClass("discard")}R(this)},s.draw_top_card=function(){let e=this.draw_pile[0].starting_lines,a=[];if(this.is_boss()){let t=[];e.forEach((function(e){t=t.concat(p(e,s.special1,s.special2))})),e=t,this.immunities&&(a=a.concat(v(this.immunities))),this.notes&&(a=a.concat(g(this.notes)))}else this.attributes&&(a=a.concat(d(this.attributes)));this.draw_pile[0].paint_front_card(this.get_real_name(),e.concat(a),this.attack,this.move,this.range,this.level,this.health),R(this)},s.must_reshuffle=function(){return!this.draw_pile.length||(I&&this.discard.length?this.discard[0].shuffle_next:void 0)},s.set_stats_monster=function(e){this.attack=e.attack,this.move=e.move,this.range=e.range,this.attributes=e.attributes,this.health=e.health},s.set_stats_boss=function(e){this.attack=e.attack,this.move=e.move,this.range=e.range,this.special1=e.special1,this.special2=e.special2,this.immunities=e.immunities,this.notes=e.notes,this.health=e.health},s.get_real_name=function(){return this.name?this.name:this.class},s.is_boss=function(){return this.class===n.Boss.class},s.set_card_piles=function(e,a){for(let a=0;a0&&e.discard[0].ui.addClass("lift");const a=e.draw_pile.shift();J(a,!0),e.discard.unshift(a)}function J(e,a){e.ui.set_depth(-3),a&&e.ui.addClass("pull"),e.ui.flip_up(!0),e.ui.removeClass("draw"),e.ui.addClass("discard")}function X(e){e.must_reshuffle()?U(e,!0):B.forEach((function(a){a.class===e.class&&(a.draw_top_card(),W(a))})),L(e.name,JSON.stringify(e))}function q(e){e.clean_discard_pile(),U(e,!0),document.body.dispatchEvent(new CustomEvent(G.MODIFIER_DECK_SHUFFLE_REQUIRED,{detail:{shuffle:!1}}))}function Z(e){e.clean_advantage_deck(),e.must_reshuffle()?q(e):(W(e),document.body.dispatchEvent(new CustomEvent(G.MODIFIER_CARD_DRAWN,{detail:{card_type:e.discard[0].card_type,count:e.count(e.discard[0].card_type)}})),e.shuffle_end_of_round()&&document.body.dispatchEvent(new CustomEvent(G.MODIFIER_DECK_SHUFFLE_REQUIRED,{detail:{shuffle:!0}}))),L("modifier_deck",JSON.stringify(e))}function K(e){let a;1===e.draw_pile.length?(Z(e),a=e.discard[0],q(e),J(a=e.draw_pile.shift(),!1),e.discard.unshift(a),Z(e)):0===e.draw_pile.length?(e.clean_advantage_deck(),q(e),Z(e),a=e.discard[0],Z(e)):(Z(e),a=e.discard[0],Z(e)),e.discard[0].ui.addClass("right"),a.ui.addClass("left"),e.advantage_to_clean=!0}function Q(e){return{ui:new F(function(e){const a=document.createElement("img");a.className="cover",a.src=e;const t=document.createElement("div");return t.className="card modifier front",t.appendChild(a),t}(e.image),function(){const e=document.createElement("div");return e.className="card modifier back",e}()),card_type:e.type,shuffle_next_round:e.shuffle}}function $(){T.shuffle_end_of_round()&&(T.clean_advantage_deck(),q(T)),L("modifier_deck",JSON.stringify(T))}function Y(e,a){const t=document.getElementById("tableau");document.getElementById("currentdeckslist").innerHTML="";const n=B.filter((function(t){return!a||0===e.filter((function(e){return e.name===t.name&&e.level===t.level})).length})),l=e.filter((function(e){return!a||0===B.filter((function(a){return e.name===a.name&&e.level===a.level})).length}));if(T)a||(t.removeChild(document.getElementById("modifier-container")),ee(),te(t,T,a));else if(ee(),te(t,T,a),a){const e=JSON.parse(A("modifier_deck")),a=ae("curse",e),t=ae("bless",e);for(let e=0;e-1&&B.splice(e,1),t.removeChild(l)},e.is_boss()?"Boss"!==e.get_real_name()&&e.set_stats_boss((i=e.get_real_name(),s=e.level,i=i.replace("Boss: ",""),{attack:[r.bosses[i].level[s].attack],move:[r.bosses[i].level[s].move],range:[r.bosses[i].level[s].range],special1:r.bosses[i].level[s].special1,special2:r.bosses[i].level[s].special2,immunities:r.bosses[i].level[s].immunities,notes:r.bosses[i].level[s].notes,health:[r.bosses[i].level[s].health]})):e.set_stats_monster(function(e,a){return{attack:[r.monsters[e].level[a].normal.attack,r.monsters[e].level[a].elite.attack],move:[r.monsters[e].level[a].normal.move,r.monsters[e].level[a].elite.move],range:[r.monsters[e].level[a].normal.range,r.monsters[e].level[a].elite.range],attributes:[r.monsters[e].level[a].normal.attributes,r.monsters[e].level[a].elite.attributes],health:[r.monsters[e].level[a].normal.health,r.monsters[e].level[a].elite.health]}}(e.get_real_name(),e.level)),U(e),a?e.draw_top_discard():R(e),B.push(e);const o=document.getElementById("currentdeckslist"),m=document.createElement("li");m.className="currentdeck",o.appendChild(m);const c=document.createElement("a");c.id="switch-"+n,c.href="#switch-"+n,c.innerText=e.get_real_name(),c.title="Click to show/hide deck",c.addEventListener("click",(function(){const e=document.getElementById(this.id.replace("switch-",""));e.className="hiddendeck"===e.className?"card-container":"hiddendeck"}),!1),m.appendChild(c)})),M()}function ee(){T=function(){const e={name:"Monster modifier deck",type:z.MODIFIER,draw_pile:[],discard:[],advantage_to_clean:!1,draw_top_discard:function(){if(this.discard.length>0){const e=this.discard[this.discard.length-1];e.ui.set_depth(-3),e.ui.addClass("pull"),e.ui.flip_up(!0),e.ui.removeClass("draw"),e.ui.addClass("discard")}R(this)}};e.count=function(e){return this.draw_pile.filter((function(a){return a.card_type===e})).length}.bind(e),e.remove_card=function(a){for(let t=0;t0}.bind(e),e.must_reshuffle=function(){return!this.draw_pile.length}.bind(e),e.clean_discard_pile=function(){for(let a=0;a7?7:this.spinner.value},t.set_value=function(e){this.spinner.value=e>7?7:e},t}function le(){const e={};e.ul=document.createElement("ul"),e.ul.className="selectionlist",e.checkboxes={},e.level_selectors={},e.global_level_selector=null;const a=document.createElement("li"),t=new ne("Select global level ",!0);a.appendChild(t.html),e.global_level_selector=t;const l=y("button","applylevel","Apply All","");l.input.onclick=function(){for(let a in e.level_selectors)e.level_selectors[a].set_value(e.global_level_selector.get_selection())},a.appendChild(l.root),e.ul.appendChild(a);for(let a in n){const t=n[a].name,l=document.createElement("li"),i=y("checkbox","deck",t,t);l.appendChild(i.root);const s=new ne(" with level ",!0);l.appendChild(s.html),e.ul.appendChild(l),e.checkboxes[t]=i.input,e.level_selectors[t]=s}return e.get_selection=function(){return D(this.checkboxes).filter(w).map(x)},e.get_selected_decks=function(){const a=this.get_selection();var t;return t=a.map(function(a){const t=a in n?n[a]:[];return t.level=e.level_selectors[a].get_selection(),t}.bind(this)),Array.prototype.concat.apply([],t)},e.set_selection=function(a){D(this.checkboxes).forEach((function(e){e.checked=!1})),a.forEach(function(a){const t=this.checkboxes[a.name];t&&(t.checked=!0,e.level_selectors[a.name].set_value(a.level))}.bind(this))},e}function ie(e){const a={};a.ul=document.createElement("ul"),a.ul.className="selectionlist",a.spinner=null,a.decks={},a.special_rules={},a.level_selector=null,a.level_selector=new ne("Select level",!1),a.ul.appendChild(a.level_selector.html);for(let t=0;t=0&&e===o.living_corpse_two_levels_extra.affected_deck?Math.min(7,parseInt(n)+o.living_corpse_two_levels_extra.extra_levels):n},a.get_scenario_decks=function(){return this.decks[this.get_selection()].map((function(e){return n[e.name]?e.class=n[e.name].class:-1!==e.name.indexOf("Boss")&&(e.class=n.Boss.class),e.level=a.get_level(e.name,a.get_special_rules()),e}))},a.get_special_rules=function(){return this.special_rules[this.get_selection()]},a}document.addEventListener("DOMContentLoaded",(function(){!function(){const e=document.getElementById("deckspage"),a=document.getElementById("scenariospage"),t=document.getElementById("applydecks"),n=document.getElementById("applyscenario"),l=document.getElementById("applyload"),i=document.getElementById("showmodifierdeck"),s=new le,r=new ie(m);e.insertAdjacentElement("afterbegin",s.ul),a.insertAdjacentElement("afterbegin",r.ul),t.onclick=function(){localStorage.clear();const e=s.get_selected_decks();L("selected_deck_names",JSON.stringify(e)),Y(e.map((function(e){return j(e.class,e.name,e.level)})),!0);const a=document.getElementById("showmodifierdeck-deckspage"),t=document.getElementById("modifier-container");a.checked?t.style.display="block":t.style.display="none"},n.onclick=function(){try{localStorage.clear()}catch(e){return void console.error("Local storage is required")}const e=r.get_scenario_decks();L("selected_deck_names",JSON.stringify(e)),s.set_selection(e),Y(e.map((function(e){return j(e.class,e.name,e.level)})),!1);const a=document.getElementById("modifier-container");i.checked?a.style.display="block":a.style.display="none",S(_.settingspane,_.cancelarea,!1)},l.onclick=function(){const e=JSON.parse(A("selected_deck_names"));s.set_selection(e),Y(e.map((function(e){return j(e.class,e.name,e.level)})),!0);const a=document.getElementById("modifier-container");i.checked?a.style.display="block":a.style.display="none"},window.onresize=M.bind(null,B)}(),function(){const e={scenarios:document.getElementById("scenariotab"),decks:document.getElementById("deckstab")},a={scenarios:document.getElementById("scenariospage"),decks:document.getElementById("deckspage")};_.settingspane=document.getElementById("settingspane"),_.settingsbtn=document.getElementById("settingsbtn"),_.cancelarea=document.getElementById("cancelarea"),e.scenarios.onclick=function(){f(e,a,"scenarios")},e.decks.onclick=function(){f(e,a,"decks")},_.settingsbtn.onclick=function(){S(_.settingspane,_.cancelarea,!0)},_.cancelarea.onclick=function(){S(_.settingspane,_.cancelarea,!1)},f(e,a,"scenarios")}()})),"serviceWorker"in navigator&&window.addEventListener("load",(function(){navigator.serviceWorker.register("/service-worker.js")}))}]);
\ No newline at end of file
diff --git a/dist/manifest.json b/dist/manifest.json
new file mode 100644
index 00000000..3cf6e389
--- /dev/null
+++ b/dist/manifest.json
@@ -0,0 +1,19 @@
+{
+ "short_name": "Gloomy Companion",
+ "name": "Gloomy Companion",
+ "start_url": "index.html",
+ "scope": ".",
+ "display": "standalone",
+ "icons": [
+ {
+ "src": "/images/icon.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ }
+ ],
+ "background_color": "#000",
+ "theme_color": "#731819",
+ "service_worker": {
+ "src": "/service-worker.js"
+ }
+}
diff --git a/dist/service-worker.js b/dist/service-worker.js
new file mode 100644
index 00000000..00f17756
--- /dev/null
+++ b/dist/service-worker.js
@@ -0,0 +1,146 @@
+// https://googlechrome.github.io/samples/service-worker/basic/
+
+/*
+ Copyright 2016 Google Inc. All Rights Reserved.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+// Names of the two caches used in this version of the service worker.
+// Change to v2, etc. when you update any of the local resources, which will
+// in turn trigger the install event again.
+const PRECACHE = 'precache-v1';
+const RUNTIME = 'runtime';
+
+// A list of local resources we always want to be cached.
+const PRECACHE_URLS = [
+ 'index.html',
+ './', // Alias for index.html
+ 'cards.css',
+ 'style.css',
+ 'main.js',
+ 'Philosopher-Bold.ttf',
+ 'PirataOne-Gloomhaven.ttf',
+ 'images/add_target.svg',
+ 'images/air.svg',
+ 'images/any_element.svg',
+ 'images/aoe-4-with-black.svg',
+ 'images/aoe-circle-with-middle-black.svg',
+ 'images/aoe-circle-with-side-black.svg',
+ 'images/aoe-circle.svg',
+ 'images/aoe-line-3-with-black.svg',
+ 'images/aoe-line-4-with-black.svg',
+ 'images/aoe-line-6-with-black.svg',
+ 'images/aoe-triangle-2-side-with-black.svg',
+ 'images/aoe-triangle-2-side.svg',
+ 'images/aoe-triangle-3-side-with-corner-black.svg',
+ 'images/aoe1.svg',
+ 'images/aoe2.svg',
+ 'images/attack.svg',
+ 'images/attack_mod_+0.jpg',
+ 'images/attack_mod_+1.jpg',
+ 'images/attack_mod_+2.jpg',
+ 'images/attack_mod_-1.jpg',
+ 'images/attack_mod_-2.jpg',
+ 'images/attack_mod_2x.jpg',
+ 'images/attack_mod_back.jpg',
+ 'images/attack_mod_bless.jpg',
+ 'images/attack_mod_curse.jpg',
+ 'images/attack_mod_null.jpg',
+ 'images/back.jpg',
+ 'images/back.svg',
+ 'images/bless.svg',
+ 'images/curse.svg',
+ 'images/dark.svg',
+ 'images/disarm.svg',
+ 'images/draw-two.svg',
+ 'images/earth.svg',
+ 'images/elderDrake.special1Area.svg',
+ 'images/fire.svg',
+ 'images/fly.svg',
+ 'images/front.jpg',
+ 'images/heal.svg',
+ 'images/ice.svg',
+ 'images/icon.png',
+ 'images/immobilize.svg',
+ 'images/inoxBodyguard.special1Area.svg',
+ 'images/invisibility.svg',
+ 'images/jump.svg',
+ 'images/light.svg',
+ 'images/loot.svg',
+ 'images/minus-circle.svg',
+ 'images/move.svg',
+ 'images/muddle.svg',
+ 'images/pierce.svg',
+ 'images/plus-circle.svg',
+ 'images/poison.svg',
+ 'images/push.svg',
+ 'images/range.svg',
+ 'images/retaliate.svg',
+ 'images/settings.svg',
+ 'images/shield.svg',
+ 'images/shuffle-black.svg',
+ 'images/shuffle.svg',
+ 'images/sightlessEye.special1Area.svg',
+ 'images/sightlessEye.special2Area.svg',
+ 'images/strengthen.svg',
+ 'images/stun.svg',
+ 'images/target.svg',
+ 'images/use_element.svg',
+ 'images/wound.svg'
+];
+
+// The install handler takes care of precaching the resources we always need.
+self.addEventListener('install', event => {
+ event.waitUntil(
+ caches.open(PRECACHE)
+ .then(cache => cache.addAll(PRECACHE_URLS))
+ .then(self.skipWaiting())
+ );
+});
+
+// The activate handler takes care of cleaning up old caches.
+self.addEventListener('activate', event => {
+ const currentCaches = [PRECACHE, RUNTIME];
+ event.waitUntil(
+ caches.keys().then(cacheNames => {
+ return cacheNames.filter(cacheName => !currentCaches.includes(cacheName));
+ }).then(cachesToDelete => {
+ return Promise.all(cachesToDelete.map(cacheToDelete => {
+ return caches.delete(cacheToDelete);
+ }));
+ }).then(() => self.clients.claim())
+ );
+});
+
+// The fetch handler serves responses for same-origin resources from a cache.
+// If no response is found, it populates the runtime cache with the response
+// from the network before returning it to the page.
+self.addEventListener('fetch', event => {
+ // Skip cross-origin requests, like those for Google Analytics.
+ if (event.request.url.startsWith(self.location.origin)) {
+ event.respondWith(
+ caches.match(event.request).then(cachedResponse => {
+ if (cachedResponse) {
+ return cachedResponse;
+ }
+
+ return caches.open(RUNTIME).then(cache => {
+ return fetch(event.request).then(response => {
+ // Put a copy of the response in the runtime cache.
+ return cache.put(event.request, response.clone()).then(() => {
+ return response;
+ });
+ });
+ });
+ })
+ );
+ }
+});
diff --git a/style.css b/dist/style.css
similarity index 100%
rename from style.css
rename to dist/style.css
diff --git a/gen-manifest.sh b/gen-manifest.sh
deleted file mode 100755
index f27c8296..00000000
--- a/gen-manifest.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-cat << EOF > app.manifest
-CACHE MANIFEST
-#
-# Version `date -u`
-#
-
-EOF
-
-git ls-tree --full-tree -r --name-only HEAD | grep -v \
- -e app.manifest \
- -e gen-manifest.sh \
- -e README.md \
- | sort >> app.manifest
-
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..13669976
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5875 @@
+{
+ "name": "gloomycompanion",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+ "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "12.7.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz",
+ "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+ "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+ "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ=="
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+ "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA=="
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+ "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q=="
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+ "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+ "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow=="
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+ "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "mamacro": "^0.0.3"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+ "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ=="
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+ "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+ "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+ "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+ "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw=="
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+ "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/helper-wasm-section": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-opt": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+ "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+ "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+ "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+ "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-code-frame": "1.8.5",
+ "@webassemblyjs/helper-fsm": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+ "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA=="
+ },
+ "acorn-jsx": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
+ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+ },
+ "ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bluebird": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz",
+ "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg=="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "12.0.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+ "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="
+ },
+ "chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "compressible": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+ "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.40.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz",
+ "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecstatic": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz",
+ "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==",
+ "dev": true,
+ "requires": {
+ "he": "^1.1.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.1.0",
+ "url-join": "^2.0.5"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz",
+ "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
+ "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz",
+ "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.2",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.4.1",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
+ "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
+ "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
+ "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ },
+ "espree": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz",
+ "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-jsx": "^5.0.2",
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
+ "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
+ "dev": true
+ },
+ "events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA=="
+ },
+ "eventsource": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w=="
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
+ "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+ "optional": true,
+ "requires": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.12.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.3.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.12.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^3.0.0"
+ },
+ "dependencies": {
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ }
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
+ },
+ "handle-thing": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "http-server": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz",
+ "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3",
+ "corser": "~2.0.0",
+ "ecstatic": "^3.0.0",
+ "http-proxy": "^1.8.1",
+ "opener": "~1.4.0",
+ "optimist": "0.6.x",
+ "portfinder": "^1.0.13",
+ "union": "~0.4.3"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
+ "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ }
+ }
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ }
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "loglevel": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz",
+ "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "mamacro": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+ "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA=="
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "dev": true,
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-forge": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
+ "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ }
+ }
+ },
+ "opener": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
+ "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "pako": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "portfinder": {
+ "version": "1.0.24",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz",
+ "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.2",
+ "debug": "^2.2.0",
+ "mkdirp": "0.5.x"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "proxy-addr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+ "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+ "dev": true,
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.0"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "querystringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz",
+ "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
+ "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.7",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
+ "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.9.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+ "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A=="
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.10.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.5",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "~0.11.1",
+ "inherits": "^2.0.3",
+ "json3": "^3.3.2",
+ "url-parse": "^1.4.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdy": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
+ "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
+ "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
+ },
+ "terser": {
+ "version": "4.3.8",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.8.tgz",
+ "integrity": "sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+ "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.7.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "union": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz",
+ "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=",
+ "dev": true,
+ "requires": {
+ "qs": "~2.3.3"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz",
+ "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=",
+ "dev": true
+ }
+ }
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-join": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
+ "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=",
+ "dev": true
+ },
+ "url-parse": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw=="
+ },
+ "watchpack": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "requires": {
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "webpack": {
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.1.tgz",
+ "integrity": "sha512-ak7u4tUu/U63sCVxA571IuPZO/Q0pZ9cEXKg+R/woxkDzVovq57uB6L2Hlg/pC8LCU+TWpvtcYwsstivQwMJmw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/wasm-edit": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "acorn": "^6.2.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.1",
+ "watchpack": "^1.6.0",
+ "webpack-sources": "^1.4.1"
+ }
+ },
+ "webpack-cli": {
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.9.tgz",
+ "integrity": "sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.2",
+ "cross-spawn": "6.0.5",
+ "enhanced-resolve": "4.1.0",
+ "findup-sync": "3.0.0",
+ "global-modules": "2.0.0",
+ "import-local": "2.0.0",
+ "interpret": "1.2.0",
+ "loader-utils": "1.2.3",
+ "supports-color": "6.1.0",
+ "v8-compile-cache": "2.0.3",
+ "yargs": "13.2.4"
+ },
+ "dependencies": {
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+ "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.2.tgz",
+ "integrity": "sha512-0xxogS7n5jHDQWy0WST0q6Ykp7UGj4YvWh+HVN71JoE7BwPxMZrwgraBvmdEMbDVMBzF0u+mEzn8TQzBm5NYJQ==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.2.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.4",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.24",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.7",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "0.3.19",
+ "sockjs-client": "1.4.0",
+ "spdy": "^4.0.1",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "12.0.5"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+ "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.4.0 <0.4.11",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "yargs": {
+ "version": "13.2.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..dd662217
--- /dev/null
+++ b/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "gloomycompanion",
+ "version": "1.0.0",
+ "description": "This is a web-app for managing the monster ability decks in the board game [Gloomhaven](https://boardgamegeek.com/boardgame/174430/gloomhaven)",
+ "private": true,
+ "scripts": {
+ "build": "webpack --mode=production",
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "dev-server": "webpack-dev-server",
+ "http-server": "http-server dist"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/wmakley/gloomycompanion.git"
+ },
+ "keywords": [
+ "Gloomhaven"
+ ],
+ "author": "William Makley",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/wmakley/gloomycompanion/issues"
+ },
+ "homepage": "https://github.com/wmakley/gloomycompanion#readme",
+ "dependencies": {
+ "webpack": "^4.41.1"
+ },
+ "devDependencies": {
+ "eslint": "^6.5.1",
+ "http-server": "^0.11.1",
+ "webpack-cli": "^3.3.9",
+ "webpack-dev-server": "^3.8.2"
+ }
+}
diff --git a/src/.eslintrc.js b/src/.eslintrc.js
new file mode 100644
index 00000000..edadc674
--- /dev/null
+++ b/src/.eslintrc.js
@@ -0,0 +1,17 @@
+module.exports = {
+ "env": {
+ "browser": true,
+ "es6": true
+ },
+ "extends": "eslint:recommended",
+ "globals": {
+ "Atomics": "readonly",
+ "SharedArrayBuffer": "readonly"
+ },
+ "parserOptions": {
+ "ecmaVersion": 2018,
+ "sourceType": "module"
+ },
+ "rules": {
+ }
+};
\ No newline at end of file
diff --git a/cards.js b/src/cards.js
similarity index 97%
rename from cards.js
rename to src/cards.js
index 5e66d169..3eab52bd 100644
--- a/cards.js
+++ b/src/cards.js
@@ -1,4 +1,4 @@
-DECKS =
+export const DECKS =
{ "Ancient Artillery": {name: "Ancient Artillery", class: "Ancient Artillery"}
, "Bandit Archer": {name: "Bandit Archer", class: "Archer"}
, "Bandit Guard": {name: "Bandit Guard", class: "Guard"}
@@ -36,7 +36,7 @@ DECKS =
, "Wind Demon": {name: "Wind Demon", class: "Wind Demon"}
};
-DECK_DEFINITONS =
+export const DECK_DEFINITIONS =
[
{ class: "Ancient Artillery"
, cards:
@@ -58,7 +58,7 @@ DECK_DEFINITONS =
, [false, "44", "* %move% -1", "* %attack% +1", "** %range% +0"]
, [false, "56", "* %attack% -1", "** %range% +0", "** %target% 2"]
, [true, "68", "* %attack% +1", "** %range% +1"]
- , [false, "14", "* %move% -1", "* %attack% -1", , "** %range% +0", "* Create a 3 damage trap in an adjacent empty hex closest to an enemy "]
+ , [false, "14", "* %move% -1", "* %attack% -1", "** %range% +0", "* Create a 3 damage trap in an adjacent empty hex closest to an enemy "]
, [true, "29", "* %move% +0", "* %attack% -1", "** %range% +1", "** %immobilize%"]
]
},
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 00000000..609d12ed
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,14 @@
+import { init } from './logic.js'
+import { init_ui } from './ui.js'
+
+document.addEventListener('DOMContentLoaded', function () {
+ init()
+ init_ui()
+})
+
+// https://developers.google.com/web/tools/workbox/guides/generate-service-worker/webpack
+if ('serviceWorker' in navigator) {
+ window.addEventListener('load', function () {
+ navigator.serviceWorker.register('/service-worker.js');
+ });
+}
diff --git a/logic.js b/src/logic.js
similarity index 65%
rename from logic.js
rename to src/logic.js
index bb8a9fcc..7e873cf4 100644
--- a/logic.js
+++ b/src/logic.js
@@ -1,43 +1,54 @@
+import { DECKS, DECK_DEFINITIONS } from './cards'
+import { CARD_TYPES_MODIFIER, MODIFIER_CARDS, MODIFIER_DECK } from './modifiers'
+import { MONSTER_STATS } from "./monster_stats"
+import { SCENARIO_DEFINITIONS, SPECIAL_RULES } from "./scenarios"
+import * as macros from './macros'
+import * as ui from './ui'
+import * as util from './util'
+
//TODO Adding an extra Guard deck will reshuffle the first one, End of round with multiple Archers, resize text, worth to show common and elite_only attributes?, shield and retaliate only when shown (apparently, attribtues are active at the beginning of the turn, and active after initiative)
-var do_shuffles = true;
-var visible_ability_decks = [];
-var modifier_deck = null;
-var deck_definitions = load_definition(DECK_DEFINITONS);
+const do_shuffles = true;
+const visible_ability_decks = [];
+let modifier_deck = null;
+const deck_definitions = load_definition(DECK_DEFINITIONS);
-var DECK_TYPES =
+const DECK_TYPES =
{
MODIFIER: "modifier",
ABILITY: "ability",
BOSS: "boss"
};
-var EVENT_NAMES = {
+const EVENT_NAMES = {
MODIFIER_CARD_DRAWN: "modifierCardDrawn",
MODIFIER_DECK_SHUFFLE_REQUIRED: "modfierDeckShuffleRequired"
};
function UICard(front_element, back_element) {
- var card = {};
+ const card = {};
card.back = back_element;
card.front = front_element;
card.flip_up = function (faceup) {
- toggle_class(this.back, "up", !faceup);
- toggle_class(this.back, "down", faceup);
+ util.toggle_class(this.back, "up", !faceup);
+ util.toggle_class(this.back, "down", faceup);
- toggle_class(this.front, "up", faceup);
- toggle_class(this.front, "down", !faceup);
+ util.toggle_class(this.front, "up", faceup);
+ util.toggle_class(this.front, "down", !faceup);
};
card.set_depth = function (z) {
+ z = z.toString();
this.back.style.zIndex = z;
this.front.style.zIndex = z;
}
card.push_down = function () {
- this.back.style.zIndex -= 1;
- this.front.style.zIndex -= 1;
+ const backZIndex = parseInt(this.back.style.zIndex, 10);
+ const frontZIndex = parseInt(this.front.style.zIndex, 10);
+ this.back.style.zIndex = (backZIndex - 1).toString();
+ this.front.style.zIndex = (frontZIndex - 1).toString();
}
card.addClass = function (class_name) {
@@ -61,10 +72,10 @@ function UICard(front_element, back_element) {
}
function create_ability_card_back(name, level) {
- var card = document.createElement("div");
+ const card = document.createElement("div");
card.className = "card ability back down";
- var name_span = document.createElement("span");
+ const name_span = document.createElement("span");
name_span.className = "name";
name_span.innerText = name + "-" + level;
card.appendChild(name_span);
@@ -73,57 +84,57 @@ function create_ability_card_back(name, level) {
}
function create_ability_card_front(initiative, name, shuffle, lines, attack, move, range, level, health) {
- var card = document.createElement("div");
+ const card = document.createElement("div");
card.className = "card ability front down";
- var name_span = document.createElement("span");
+ const name_span = document.createElement("span");
name_span.className = "name";
name_span.innerText = name + "-" + level;
card.appendChild(name_span);
- var healthNormal_span = document.createElement("span");
+ const healthNormal_span = document.createElement("span");
healthNormal_span.className = "healthNormal";
healthNormal_span.innerText = "HP " + health[0];
card.appendChild(healthNormal_span);
if ( health[1] > 0 ) {
- var healthElite_span = document.createElement("span");
+ const healthElite_span = document.createElement("span");
healthElite_span.className = "healthElite";
healthElite_span.innerText = "HP " + health[1];
card.appendChild(healthElite_span);
}
- var initiative_span = document.createElement("span");
+ const initiative_span = document.createElement("span");
initiative_span.className = "initiative";
initiative_span.innerText = initiative;
card.appendChild(initiative_span);
if (shuffle) {
- var shuffle_img = document.createElement("img");
+ const shuffle_img = document.createElement("img");
shuffle_img.src = "images/shuffle.svg";
card.appendChild(shuffle_img);
}
- var current_depth = 0;
- var current_parent = card;
+ let current_depth = 0;
+ let current_parent = card;
- lines = remove_empty_strings(lines);
- for (var i = 0; i < lines.length; i++) {
- var line = lines[i];
+ lines = util.remove_empty_strings(lines);
+ for (let i = 0; i < lines.length; i++) {
+ let line = lines[i];
- var new_depth = 0;
+ let new_depth = 0;
while (line.indexOf("*") >= 0) {
new_depth += 1;
line = line.substr(1);
}
- var diff = new_depth - current_depth;
+ const diff = new_depth - current_depth;
- while (current_depth != new_depth) {
+ while (current_depth !== new_depth) {
if (diff > 0) {
// Need one level lower, create
- var list = document.createElement("ul");
+ const list = document.createElement("ul");
// Dynamically adapt the size to the line length. I found this the sweet spot to read all the cards
if (lines.length > 5) {
list.style.fontSize = (100 - (lines.length * 2.5)) + "%";
@@ -132,7 +143,7 @@ function create_ability_card_front(initiative, name, shuffle, lines, attack, mov
current_parent = list;
// Create
- var list_item = document.createElement("li");
+ const list_item = document.createElement("li");
current_parent.appendChild(list_item);
current_parent = list_item;
@@ -154,12 +165,12 @@ function create_ability_card_front(initiative, name, shuffle, lines, attack, mov
current_parent = current_parent.parentElement;
// create sibling
- var list_item = document.createElement("li");
+ const list_item = document.createElement("li");
current_parent.appendChild(list_item);
current_parent = list_item;
}
- text = expand_string(line.trim(), attack, move, range);
+ const text = macros.expand_string(line.trim(), attack, move, range);
current_parent.insertAdjacentHTML("beforeend", text);
}
@@ -167,14 +178,14 @@ function create_ability_card_front(initiative, name, shuffle, lines, attack, mov
}
function load_ability_deck(deck_class, deck_name, level) {
- var deck_definition = deck_definitions[deck_class];
+ const deck_definition = deck_definitions[deck_class];
deck_definition.name = deck_name;
deck_definition.level = level;
- var loaded_deck = JSON.parse(get_from_storage(deck_name));
+ const loaded_deck = JSON.parse(util.get_from_storage(deck_name));
- var deck = {
+ const deck = {
class: deck_definition.class,
name: deck_definition.name,
type: DECK_TYPES.ABILITY,
@@ -187,18 +198,18 @@ function load_ability_deck(deck_class, deck_name, level) {
health: [0,0]
}
- for (var i = 0; i < deck_definition.cards.length; i++) {
- var definition = deck_definition.cards[i];
- var shuffle = definition[0];
- var initiative = definition[1];
- var lines = definition.slice(2);
+ for (let i = 0; i < deck_definition.cards.length; i++) {
+ const definition = deck_definition.cards[i];
+ const shuffle = definition[0];
+ const initiative = definition[1];
+ const lines = definition.slice(2);
- var empty_front = document.createElement("div");
+ const empty_front = document.createElement("div");
empty_front.className = "card ability front down";
- var card_front = empty_front;
- var card_back = create_ability_card_back(deck.name, deck.level);
+ const card_front = empty_front;
+ const card_back = create_ability_card_back(deck.name, deck.level);
- var card = {
+ const card = {
id: deck.name + '_' + i,
ui: new UICard(card_front, card_back),
shuffle_next: shuffle,
@@ -209,7 +220,7 @@ function load_ability_deck(deck_class, deck_name, level) {
card.paint_front_card = function (name, lines, attack, move, range, level, health) {
this.ui.front = create_ability_card_front(this.initiative, name, this.shuffle_next, lines, attack, move, range, level, health);
}
- if (loaded_deck && find_in_discard(loaded_deck.discard, card.id)) {
+ if (loaded_deck && util.find_in_discard(loaded_deck.discard, card.id)) {
deck.discard.push(card);
} else {
deck.draw_pile.push(card);
@@ -217,25 +228,25 @@ function load_ability_deck(deck_class, deck_name, level) {
}
deck.draw_top_discard = function() {
if (this.discard.length > 0) {
- var card = this.discard[this.discard.length-1];
- var cards_lines = card.starting_lines;
- var extra_lines = [];
+ const card = this.discard[this.discard.length-1];
+ let cards_lines = card.starting_lines;
+ let extra_lines = [];
if (this.is_boss()) {
- var new_lines = [];
+ let new_lines = [];
cards_lines.forEach(function (line) {
- new_lines = new_lines.concat(special_to_lines(line, deck.special1, deck.special2));
+ new_lines = new_lines.concat(macros.special_to_lines(line, deck.special1, deck.special2));
});
cards_lines = new_lines;
if (this.immunities) {
- extra_lines = extra_lines.concat(immunities_to_lines(this.immunities));
+ extra_lines = extra_lines.concat(macros.immunities_to_lines(this.immunities));
}
if (this.notes) {
- extra_lines = extra_lines.concat(notes_to_lines(this.notes));
+ extra_lines = extra_lines.concat(macros.notes_to_lines(this.notes));
}
}
else {
if (this.attributes) {
- extra_lines = extra_lines.concat(attributes_to_lines(this.attributes));
+ extra_lines = extra_lines.concat(macros.attributes_to_lines(this.attributes));
}
}
@@ -253,24 +264,24 @@ function load_ability_deck(deck_class, deck_name, level) {
deck.draw_top_card = function () {
- var cards_lines = this.draw_pile[0].starting_lines;
- var extra_lines = [];
+ let cards_lines = this.draw_pile[0].starting_lines;
+ let extra_lines = [];
if (this.is_boss()) {
- var new_lines = [];
+ let new_lines = [];
cards_lines.forEach(function (line) {
- new_lines = new_lines.concat(special_to_lines(line, deck.special1, deck.special2));
+ new_lines = new_lines.concat(macros.special_to_lines(line, deck.special1, deck.special2));
});
cards_lines = new_lines;
if (this.immunities) {
- extra_lines = extra_lines.concat(immunities_to_lines(this.immunities));
+ extra_lines = extra_lines.concat(macros.immunities_to_lines(this.immunities));
}
if (this.notes) {
- extra_lines = extra_lines.concat(notes_to_lines(this.notes));
+ extra_lines = extra_lines.concat(macros.notes_to_lines(this.notes));
}
}
else {
if (this.attributes) {
- extra_lines = extra_lines.concat(attributes_to_lines(this.attributes));
+ extra_lines = extra_lines.concat(macros.attributes_to_lines(this.attributes));
}
}
@@ -313,34 +324,34 @@ function load_ability_deck(deck_class, deck_name, level) {
}
deck.is_boss = function () {
- return this.class == DECKS["Boss"].class;
+ return this.class === DECKS["Boss"].class;
}
deck.set_card_piles = function (draw_pile, discard_pile) {
- for (var i = 0; i < draw_pile.length; i++) {
+ for (let i = 0; i < draw_pile.length; i++) {
this.draw_pile[i].shuffle_next = draw_pile[i].shuffle_next;
this.draw_pile[i].initiative = draw_pile[i].initiative;
this.draw_pile[i].starting_lines = draw_pile[i].starting_lines;
}
- for (var i = 0; i < discard_pile.length; i++) {
+ for (let i = 0; i < discard_pile.length; i++) {
this.discard[i].shuffle_next = discard_pile[i].shuffle_next;
this.discard[i].initiative = discard_pile[i].initiative;
this.discard[i].starting_lines = discard_pile[i].starting_lines;
}
}
- write_to_storage(deck.name, JSON.stringify(deck));
+ util.write_to_storage(deck.name, JSON.stringify(deck));
return deck;
}
function place_deck(deck, container) {
- for (var i = 0; i < deck.draw_pile.length; i++) {
- var card = deck.draw_pile[i];
+ for (let i = 0; i < deck.draw_pile.length; i++) {
+ const card = deck.draw_pile[i];
card.ui.attach(container);
}
- for (var i = 0; i < deck.discard.length; i++) {
- var card = deck.discard[i];
+ for (let i = 0; i < deck.discard.length; i++) {
+ const card = deck.discard[i];
card.ui.attach(container);
}
deck.deck_space = container;
@@ -348,24 +359,24 @@ function place_deck(deck, container) {
function force_repaint_deck(deck) {
prevent_pull_animation(deck);
- var space = deck.deck_space;
- remove_child(space);
+ const space = deck.deck_space;
+ util.remove_child(space);
place_deck(deck, space);
}
// This should be dynamic dependant on lines per card
function refresh_ui() {
- var actual_card_height = 296;
- var base_font_size = 26.6;
+ const actual_card_height = 296;
+ const base_font_size = 26.6;
- var tableau = document.getElementById("tableau");
- var cards = tableau.getElementsByClassName("card");
- for (var i = 1; i < cards.length; i++) {
+ const tableau = document.getElementById("tableau");
+ const cards = tableau.getElementsByClassName("card");
+ for (let i = 1; i < cards.length; i++) {
if (cards[i].className.indexOf("ability") !== -1) {
- var scale = cards[i].getBoundingClientRect().height / actual_card_height;
- var scaled_font_size = base_font_size * scale;
+ const scale = cards[i].getBoundingClientRect().height / actual_card_height;
+ const scaled_font_size = base_font_size * scale;
- var font_pixel_size = Math.min(scaled_font_size, base_font_size);
+ const font_pixel_size = Math.min(scaled_font_size, base_font_size);
tableau.style.fontSize = font_pixel_size + "px";
break;
}
@@ -377,8 +388,7 @@ function reshuffle(deck, include_discards) {
// This way we keep sync several decks from the same class
visible_ability_decks.forEach(function (visible_deck) {
- if ((visible_deck !== deck) && (visible_deck.class == deck.class)) {
- var real_name = visible_deck.get_real_name();
+ if ((visible_deck !== deck) && (visible_deck.class === deck.class)) {
shuffle_deck(visible_deck, include_discards);
visible_deck.set_card_piles(deck.draw_pile, deck.discard);
}
@@ -391,10 +401,10 @@ function shuffle_deck(deck, include_discards) {
deck.discard = [];
}
- shuffle_list(deck.draw_pile);
+ util.shuffle_list(deck.draw_pile);
- for (var i = 0; i < deck.draw_pile.length; i++) {
- var card = deck.draw_pile[i];
+ for (let i = 0; i < deck.draw_pile.length; i++) {
+ const card = deck.draw_pile[i];
card.ui.removeClass("lift");
card.ui.removeClass("pull");
@@ -409,8 +419,8 @@ function shuffle_deck(deck, include_discards) {
}
function flip_up_top_card(deck) {
- for (var i = 0; i < deck.discard.length; i++) {
- var card = deck.discard[i];
+ for (let i = 0; i < deck.discard.length; i++) {
+ const card = deck.discard[i];
card.ui.removeClass("lift");
card.ui.removeClass("pull");
card.ui.push_down();
@@ -420,8 +430,8 @@ function flip_up_top_card(deck) {
deck.discard[0].ui.addClass("lift");
}
- var card = deck.draw_pile.shift(card);
- send_to_discard(card, pull_animation = true);
+ const card = deck.draw_pile.shift();
+ send_to_discard(card, true);
deck.discard.unshift(card);
}
@@ -445,13 +455,13 @@ function draw_ability_card(deck) {
}
else {
visible_ability_decks.forEach(function (visible_deck) {
- if (visible_deck.class == deck.class) {
+ if (visible_deck.class === deck.class) {
visible_deck.draw_top_card();
flip_up_top_card(visible_deck);
}
});
}
- write_to_storage(deck.name, JSON.stringify(deck));
+ util.write_to_storage(deck.name, JSON.stringify(deck));
}
function prevent_pull_animation(deck) {
@@ -494,27 +504,27 @@ function draw_modifier_card(deck) {
document.body.dispatchEvent(new CustomEvent(EVENT_NAMES.MODIFIER_DECK_SHUFFLE_REQUIRED, { detail: { shuffle: true } }));
}
}
- write_to_storage("modifier_deck", JSON.stringify(deck));
+ util.write_to_storage("modifier_deck", JSON.stringify(deck));
}
function double_draw(deck) {
- var advantage_card;
+ let advantage_card;
// Case there was 1 card in draw_pile when we clicked "draw 2".
// now we should draw, save that card, reshuffle, and
// draw the next
- if (deck.draw_pile.length == 1) {
+ if (deck.draw_pile.length === 1) {
draw_modifier_card(deck);
advantage_card = deck.discard[0];
reshuffle_modifier_deck(deck);
- advantage_card = deck.draw_pile.shift(advantage_card);
- send_to_discard(advantage_card, pull_animation = false);
+ advantage_card = deck.draw_pile.shift();
+ send_to_discard(advantage_card, false);
deck.discard.unshift(advantage_card);
draw_modifier_card(deck);
}
// Case there were 0 cards in draw_pile when we clicked "draw 2".
// we should reshuffle, draw 1 and send it to advantage_place,
// draw the next
- else if (deck.draw_pile.length == 0) {
+ else if (deck.draw_pile.length === 0) {
// This is in case the previous draw was double as well
deck.clean_advantage_deck();
reshuffle_modifier_deck(deck);
@@ -534,7 +544,7 @@ function double_draw(deck) {
}
function load_modifier_deck() {
- var deck =
+ const deck =
{
name: "Monster modifier deck",
type: DECK_TYPES.MODIFIER,
@@ -545,7 +555,7 @@ function load_modifier_deck() {
deck.draw_top_discard = function() {
if (this.discard.length > 0) {
- var card = this.discard[this.discard.length-1];
+ const card = this.discard[this.discard.length-1];
card.ui.set_depth(-3);
card.ui.addClass("pull");
card.ui.flip_up(true);
@@ -562,8 +572,8 @@ function load_modifier_deck() {
}.bind(deck);
deck.remove_card = function (card_type) {
- for (var i = 0; i < deck.draw_pile.length; i++) {
- if (deck.draw_pile[i].card_type == card_type) {
+ for (let i = 0; i < deck.draw_pile.length; i++) {
+ if (deck.draw_pile[i].card_type === card_type) {
deck.draw_pile.splice(i, 1);
reshuffle(deck, false);
@@ -571,7 +581,7 @@ function load_modifier_deck() {
break;
}
}
- write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
+ util.write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
return this.count(card_type);
}.bind(deck);
@@ -579,13 +589,13 @@ function load_modifier_deck() {
deck.add_card = function (card_type) {
// Rulebook p. 23: "a maximum of only 10 curse [and 10 bless] cards can be placed into any one deck"
if (this.count(card_type) < 10) {
- // TOOD: Brittle
+ // TODO: Brittle
deck.draw_pile.push(define_modifier_card(MODIFIER_CARDS[card_type.toUpperCase()]));
force_repaint_deck(deck);
reshuffle(deck, false);
}
- write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
+ util.write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
return this.count(card_type);
}.bind(deck);
@@ -601,9 +611,9 @@ function load_modifier_deck() {
}.bind(deck);
deck.clean_discard_pile = function () {
- for (var i = 0; i < deck.discard.length; i++) {
- if (this.discard[i].card_type == CARD_TYPES_MODIFIER.BLESS
- || this.discard[i].card_type == CARD_TYPES_MODIFIER.CURSE) {
+ for (let i = 0; i < deck.discard.length; i++) {
+ if (this.discard[i].card_type === CARD_TYPES_MODIFIER.BLESS
+ || this.discard[i].card_type === CARD_TYPES_MODIFIER.CURSE) {
//Delete this curse/bless that has been used
this.discard.splice(i, 1);
i--;
@@ -623,10 +633,10 @@ function load_modifier_deck() {
deck.discard[1].ui.removeClass("left");
}
}.bind(deck);
- var loaded_deck = JSON.parse(get_from_storage("modifier_deck"));
+ const loaded_deck = JSON.parse(util.get_from_storage("modifier_deck"));
MODIFIER_DECK.forEach(function (card_definition) {
- var card = define_modifier_card(card_definition);
+ const card = define_modifier_card(card_definition);
if (loaded_deck && find_in_discard_and_remove(loaded_deck.discard,card.card_type)) {
deck.discard.push(card);
} else {
@@ -638,7 +648,7 @@ function load_modifier_deck() {
}
function find_in_discard_and_remove(discard, card_type) {
- for (var i=0; i < discard.length; i++) {
+ for (let i=0; i < discard.length; i++) {
if (discard[i].card_type === card_type) {
return discard.splice(i,1);
}
@@ -647,18 +657,18 @@ function find_in_discard_and_remove(discard, card_type) {
}
function create_modifier_card_back() {
- var card = document.createElement("div");
+ const card = document.createElement("div");
card.className = "card modifier back";
return card;
}
function create_modifier_card_front(card_url) {
- var img = document.createElement("img");
+ const img = document.createElement("img");
img.className = "cover";
img.src = card_url;
- var card = document.createElement("div");
+ const card = document.createElement("div");
card.className = "card modifier front";
card.appendChild(img);
@@ -666,10 +676,10 @@ function create_modifier_card_front(card_url) {
}
function define_modifier_card(card_definition) {
- var card_front = create_modifier_card_front(card_definition.image);
- var card_back = create_modifier_card_back();
+ const card_front = create_modifier_card_front(card_definition.image);
+ const card_back = create_modifier_card_back();
- var card = {
+ const card = {
ui: new UICard(card_front, card_back),
card_type: card_definition.type,
shuffle_next_round: card_definition.shuffle
@@ -683,13 +693,13 @@ function end_round() {
modifier_deck.clean_advantage_deck();
reshuffle_modifier_deck(modifier_deck);
}
- write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
+ util.write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
}
function load_definition(card_database) {
- var decks = {};
- for (var i = 0; i < card_database.length; i++) {
- var definition = card_database[i];
+ const decks = {};
+ for (let i = 0; i < card_database.length; i++) {
+ const definition = card_database[i];
decks[definition.class] = definition;
}
@@ -697,20 +707,20 @@ function load_definition(card_database) {
}
function get_monster_stats(name, level) {
- var attack = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["attack"],
+ const attack = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["attack"],
MONSTER_STATS["monsters"][name]["level"][level]["elite"]["attack"]
];
- var move = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["move"],
+ const move = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["move"],
MONSTER_STATS["monsters"][name]["level"][level]["elite"]["move"]
];
- var range = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["range"],
+ const range = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["range"],
MONSTER_STATS["monsters"][name]["level"][level]["elite"]["range"]
];
- var attributes = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["attributes"],
+ const attributes = [MONSTER_STATS["monsters"][name]["level"][level]["normal"]["attributes"],
MONSTER_STATS["monsters"][name]["level"][level]["elite"]["attributes"]
];
- var health = [ MONSTER_STATS["monsters"][name]["level"][level]["normal"]["health"],
+ const health = [ MONSTER_STATS["monsters"][name]["level"][level]["normal"]["health"],
MONSTER_STATS["monsters"][name]["level"][level]["elite"]["health"]
];
@@ -719,14 +729,14 @@ function get_monster_stats(name, level) {
function get_boss_stats(name, level) {
name = name.replace("Boss: ", "");
- var attack = [MONSTER_STATS["bosses"][name]["level"][level]["attack"]];
- var move = [MONSTER_STATS["bosses"][name]["level"][level]["move"]];
- var range = [MONSTER_STATS["bosses"][name]["level"][level]["range"]];
- var special1 = MONSTER_STATS["bosses"][name]["level"][level]["special1"];
- var special2 = MONSTER_STATS["bosses"][name]["level"][level]["special2"];
- var immunities = MONSTER_STATS["bosses"][name]["level"][level]["immunities"];
- var notes = MONSTER_STATS["bosses"][name]["level"][level]["notes"];
- var health = [MONSTER_STATS["bosses"][name]["level"][level]["health"]];
+ const attack = [MONSTER_STATS["bosses"][name]["level"][level]["attack"]];
+ const move = [MONSTER_STATS["bosses"][name]["level"][level]["move"]];
+ const range = [MONSTER_STATS["bosses"][name]["level"][level]["range"]];
+ const special1 = MONSTER_STATS["bosses"][name]["level"][level]["special1"];
+ const special2 = MONSTER_STATS["bosses"][name]["level"][level]["special2"];
+ const immunities = MONSTER_STATS["bosses"][name]["level"][level]["immunities"];
+ const notes = MONSTER_STATS["bosses"][name]["level"][level]["notes"];
+ const health = [MONSTER_STATS["bosses"][name]["level"][level]["health"]];
return {
"attack": attack,
@@ -741,31 +751,31 @@ function get_boss_stats(name, level) {
}
function apply_deck_selection(decks, preserve_existing_deck_state) {
- var container = document.getElementById("tableau");
+ const container = document.getElementById("tableau");
document.getElementById("currentdeckslist").innerHTML = "";
- var decks_to_remove = visible_ability_decks.filter(function (visible_deck) {
+ const decks_to_remove = visible_ability_decks.filter(function (visible_deck) {
return !preserve_existing_deck_state || (decks.filter(function (deck) {
- return ((deck.name == visible_deck.name) && (deck.level == visible_deck.level))
- }).length == 0);
+ return ((deck.name === visible_deck.name) && (deck.level === visible_deck.level))
+ }).length === 0);
});
- var decks_to_add = decks.filter(function (deck) {
+ const decks_to_add = decks.filter(function (deck) {
return !preserve_existing_deck_state || (visible_ability_decks.filter(function (visible_deck) {
- return ((deck.name == visible_deck.name) && (deck.level == visible_deck.level))
- }).length == 0);
+ return ((deck.name === visible_deck.name) && (deck.level === visible_deck.level))
+ }).length === 0);
});
if (!modifier_deck) {
init_modifier_deck();
add_modifier_deck(container, modifier_deck,preserve_existing_deck_state);
if (preserve_existing_deck_state) {
- var loaded_modifier_deck = JSON.parse(get_from_storage("modifier_deck"));
- var curses = count_type("curse", loaded_modifier_deck);
- var blessings = count_type("bless", loaded_modifier_deck);
- for (var i =0; i < blessings; i++) {
+ const loaded_modifier_deck = JSON.parse(util.get_from_storage("modifier_deck"));
+ const curses = count_type("curse", loaded_modifier_deck);
+ const blessings = count_type("bless", loaded_modifier_deck);
+ for (let i =0; i < blessings; i++) {
modifier_deck.add_card("bless");
}
- for (var i =0; i < curses; i++) {
+ for (let i =0; i < curses; i++) {
modifier_deck.add_card("curse");
}
modifier_deck.draw_top_discard();
@@ -778,15 +788,15 @@ function apply_deck_selection(decks, preserve_existing_deck_state) {
init_modifier_deck();
add_modifier_deck(container, modifier_deck,preserve_existing_deck_state);
}
- write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
+ util.write_to_storage("modifier_deck", JSON.stringify(modifier_deck));
decks_to_remove.forEach(function (deck) {
deck.discard_deck();
});
decks_to_add.forEach(function (deck) {
- var deckid = deck.get_real_name().replace(/\s+/g, '');
- var deck_space = document.createElement("div");
+ const deckid = deck.get_real_name().replace(/\s+/g, '');
+ const deck_space = document.createElement("div");
deck_space.id = deckid;
deck_space.addEventListener('contextmenu', function(e) {
this.className = "hiddendeck";
@@ -800,12 +810,12 @@ function apply_deck_selection(decks, preserve_existing_deck_state) {
place_deck(deck, deck_space);
reshuffle(deck, !preserve_existing_deck_state);
if (preserve_existing_deck_state) {
-
+ // TODO: NOOP?
}
deck_space.onclick = draw_ability_card.bind(null, deck);
deck.discard_deck = function () {
- var index = visible_ability_decks.indexOf(this);
+ const index = visible_ability_decks.indexOf(this);
if (index > -1) {
visible_ability_decks.splice(index, 1);
@@ -816,7 +826,7 @@ function apply_deck_selection(decks, preserve_existing_deck_state) {
if (deck.is_boss()) {
// We don't want stats if someone selects Boss on the deck tab
- if (deck.get_real_name() != "Boss") {
+ if (deck.get_real_name() !== "Boss") {
deck.set_stats_boss(get_boss_stats(deck.get_real_name(), deck.level));
}
} else {
@@ -831,18 +841,18 @@ function apply_deck_selection(decks, preserve_existing_deck_state) {
}
visible_ability_decks.push(deck);
- var currentdeckslist = document.getElementById("currentdeckslist");
- var list_item = document.createElement("li");
+ const currentdeckslist = document.getElementById("currentdeckslist");
+ const list_item = document.createElement("li");
list_item.className = "currentdeck";
currentdeckslist.appendChild(list_item);
- var label = document.createElement("a");
+ const label = document.createElement("a");
label.id = "switch-" + deckid;
label.href = "#switch-" + deckid
label.innerText = deck.get_real_name();
label.title = "Click to show/hide deck";
- label.addEventListener("click", function(e){
- var d = document.getElementById(this.id.replace("switch-",""));
- d.className = (d.className == "hiddendeck") ? "card-container" : "hiddendeck";
+ label.addEventListener("click", function(){
+ const d = document.getElementById(this.id.replace("switch-",""));
+ d.className = (d.className === "hiddendeck") ? "card-container" : "hiddendeck";
}, false)
list_item.appendChild(label);
});
@@ -856,9 +866,9 @@ function init_modifier_deck() {
}
function count_type(type, deck) {
- var count = 0;
+ let count = 0;
if (deck) {
- for (var i = 0; i < deck.draw_pile.length; i++) {
+ for (let i = 0; i < deck.draw_pile.length; i++) {
if (deck.draw_pile[i].card_type === type) {
count++;
}
@@ -870,7 +880,7 @@ function count_type(type, deck) {
function add_modifier_deck(container, deck, preserve_discards) {
function create_counter(card_type, increment_func, decrement_func, title) {
function create_button(class_name, text, func, text_element) {
- var button = document.createElement("div");
+ const button = document.createElement("div");
button.className = class_name + " button";
button.innerText = text;
@@ -881,15 +891,15 @@ function add_modifier_deck(container, deck, preserve_discards) {
return button;
}
- var widget_container = document.createElement("div");
+ const widget_container = document.createElement("div");
widget_container.className = "counter-icon";
widget_container.title = title;
- var background = document.createElement("div");
+ const background = document.createElement("div");
background.className = "background " + card_type;
widget_container.appendChild(background);
- var text_element = document.createElement("div");
+ const text_element = document.createElement("div");
text_element.className = "icon-text";
text_element.innerText = "0";
@@ -915,17 +925,17 @@ function add_modifier_deck(container, deck, preserve_discards) {
}
}
- var modifier_container = document.createElement("div");
+ const modifier_container = document.createElement("div");
modifier_container.className = "card-container";
modifier_container.id = "modifier-container";
- var button_div = document.createElement("div");
+ const button_div = document.createElement("div");
button_div.className = "modifier-deck-column-1";
button_div.appendChild(create_counter("bless", deck.add_card, deck.remove_card, "Bless cards"));
button_div.appendChild(create_counter("curse", deck.add_card, deck.remove_card, "Curse cards"));
- var end_round_div = document.createElement("div");
+ const end_round_div = document.createElement("div");
end_round_div.className = "counter-icon shuffle not-required";
end_round_div.onclick = end_round;
end_round_div.title = "Click to end round and shuffle";
@@ -933,14 +943,14 @@ function add_modifier_deck(container, deck, preserve_discards) {
document.body.addEventListener(EVENT_NAMES.MODIFIER_DECK_SHUFFLE_REQUIRED, indicate_shuffle_required);
- var deck_column = document.createElement("div");
+ const deck_column = document.createElement("div");
deck_column.className = "modifier-deck-column-2";
- var deck_space = document.createElement("div");
+ const deck_space = document.createElement("div");
deck_space.className = "card-container modifier";
deck_space.title = "Click to draw one card";
- var draw_two_button = document.createElement("div");
+ const draw_two_button = document.createElement("div");
draw_two_button.className = "button draw-two";
draw_two_button.onclick = double_draw.bind(null, modifier_deck);
draw_two_button.title = "Click to draw two cards";
@@ -960,18 +970,18 @@ function add_modifier_deck(container, deck, preserve_discards) {
}
function LevelSelector(text, inline) {
- var max_level = 7;
- var level = {};
+ const max_level = 7;
+ const level = {};
level.html = inline ? document.createElement("span") : document.createElement("ul");
level.html.className = "selectionlist";
- var listitem = inline ? document.createElement("label") : document.createElement("li");
+ const listitem = inline ? document.createElement("label") : document.createElement("li");
listitem.innerText = text;
level.html.appendChild(listitem);
- var level_spinner = create_input("number", "scenario_number", "1", "");
- level_spinner.input.min = 0;
- level_spinner.input.max = max_level;
+ const level_spinner = util.create_input("number", "scenario_number", "1", "");
+ level_spinner.input.min = "0";
+ level_spinner.input.max = max_level.toString();
level.html.appendChild(level_spinner.input);
level.spinner = level_spinner.input;
@@ -987,7 +997,7 @@ function LevelSelector(text, inline) {
}
function DeckList() {
- var decklist = {};
+ const decklist = {};
decklist.ul = document.createElement("ul");
decklist.ul.className = "selectionlist";
decklist.checkboxes = {};
@@ -995,14 +1005,14 @@ function DeckList() {
decklist.global_level_selector = null;
- var listitem = document.createElement("li");
- var global_level_selector = new LevelSelector("Select global level ", true);
+ const listitem = document.createElement("li");
+ const global_level_selector = new LevelSelector("Select global level ", true);
listitem.appendChild(global_level_selector.html);
decklist.global_level_selector = global_level_selector;
- var dom_dict = create_input("button", "applylevel", "Apply All", "");
+ const dom_dict = util.create_input("button", "applylevel", "Apply All", "");
dom_dict.input.onclick = function () {
- for (key in decklist.level_selectors) {
+ for (let key in decklist.level_selectors) {
decklist.level_selectors[key].set_value(decklist.global_level_selector.get_selection());
}
};
@@ -1010,30 +1020,28 @@ function DeckList() {
decklist.ul.appendChild(listitem);
- for (key in DECKS) {
- var real_name = DECKS[key].name;
- var listitem = document.createElement("li");
- var dom_dict = create_input("checkbox", "deck", real_name, real_name);
+ for (let key in DECKS) {
+ const real_name = DECKS[key].name;
+ const listitem = document.createElement("li");
+ const dom_dict = util.create_input("checkbox", "deck", real_name, real_name);
listitem.appendChild(dom_dict.root);
- var level_selector = new LevelSelector(" with level ", true);
+ const level_selector = new LevelSelector(" with level ", true);
listitem.appendChild(level_selector.html);
decklist.ul.appendChild(listitem);
decklist.checkboxes[real_name] = dom_dict.input;
decklist.level_selectors[real_name] = level_selector;
-
}
- ;
decklist.get_selection = function () {
- return dict_values(this.checkboxes).filter(is_checked).map(input_value);
+ return util.dict_values(this.checkboxes).filter(util.is_checked).map(util.input_value);
}
decklist.get_selected_decks = function () {
- var selected_checkbox = this.get_selection();
- var selected_decks = concat_arrays(selected_checkbox.map(function (name) {
- var deck = ((name in DECKS) ? DECKS[name] : []);
+ const selected_checkbox = this.get_selection();
+ const selected_decks = util.concat_arrays(selected_checkbox.map(function (name) {
+ const deck = ((name in DECKS) ? DECKS[name] : []);
deck.level = decklist.level_selectors[name].get_selection();
return deck;
}.bind(this)));
@@ -1041,12 +1049,12 @@ function DeckList() {
}
decklist.set_selection = function (selected_deck_names) {
- dict_values(this.checkboxes).forEach(function (checkbox) {
+ util.dict_values(this.checkboxes).forEach(function (checkbox) {
checkbox.checked = false;
});
selected_deck_names.forEach(function (deck_names) {
- var checkbox = this.checkboxes[deck_names.name];
+ const checkbox = this.checkboxes[deck_names.name];
if (checkbox) {
checkbox.checked = true;
decklist.level_selectors[deck_names.name].set_value(deck_names.level);
@@ -1058,7 +1066,7 @@ function DeckList() {
}
function ScenarioList(scenarios) {
- var scenariolist = {};
+ const scenariolist = {};
scenariolist.ul = document.createElement("ul");
scenariolist.ul.className = "selectionlist";
scenariolist.spinner = null;
@@ -1070,34 +1078,34 @@ function ScenarioList(scenarios) {
scenariolist.ul.appendChild(scenariolist.level_selector.html);
- for (var i = 0; i < scenarios.length; i++) {
- var scenario = scenarios[i];
+ for (let i = 0; i < scenarios.length; i++) {
+ const scenario = scenarios[i];
scenariolist.decks[i] = scenario.decks;
scenariolist.special_rules[i] = scenario.special_rules ? scenario.special_rules : "";
}
- var listitem = document.createElement("li");
+ const listitem = document.createElement("li");
listitem.innerText = "Select scenario number";
scenariolist.ul.appendChild(listitem);
- var scenario_spinner = create_input("number", "scenario_number", "1", "");
- scenario_spinner.input.min = 1;
+ const scenario_spinner = util.create_input("number", "scenario_number", "1", "");
+ scenario_spinner.input.min = "1";
scenario_spinner.input.max = scenarios.length;
scenariolist.ul.appendChild(scenario_spinner.input);
scenariolist.spinner = scenario_spinner.input;
scenariolist.get_selection = function () {
// We're using the scenario index that is zero-based, but the scenario list is 1-based
- var current_value = scenariolist.spinner.value - 1;
+ const current_value = scenariolist.spinner.value - 1;
return Math.min(current_value, scenarios.length + 1);
}
scenariolist.get_level = function (deck_name, special_rules) {
- var base_level = scenariolist.level_selector.get_selection();
+ const base_level = scenariolist.level_selector.get_selection();
- if ((special_rules.indexOf(SPECIAL_RULES.living_corpse_two_levels_extra) >= 0) && (deck_name == SPECIAL_RULES.living_corpse_two_levels_extra.affected_deck)) {
- return Math.min(7, (parseInt(base_level) + parseInt(SPECIAL_RULES.living_corpse_two_levels_extra.extra_levels)));
+ if ((special_rules.indexOf(SPECIAL_RULES.living_corpse_two_levels_extra) >= 0) && (deck_name === SPECIAL_RULES.living_corpse_two_levels_extra.affected_deck)) {
+ return Math.min(7, (parseInt(base_level) + SPECIAL_RULES.living_corpse_two_levels_extra.extra_levels));
} else {
return base_level;
}
@@ -1107,7 +1115,7 @@ function ScenarioList(scenarios) {
return (this.decks[this.get_selection()].map(function (deck) {
if (DECKS[deck.name]) {
deck.class = DECKS[deck.name].class;
- } else if (deck.name.indexOf("Boss") != -1) {
+ } else if (deck.name.indexOf("Boss") !== -1) {
deck.class = DECKS["Boss"].class;
}
deck.level = scenariolist.get_level(deck.name, scenariolist.get_special_rules());
@@ -1122,30 +1130,30 @@ function ScenarioList(scenarios) {
return scenariolist;
}
-function init() {
- var deckspage = document.getElementById("deckspage");
- var scenariospage = document.getElementById("scenariospage");
- var applydeckbtn = document.getElementById("applydecks");
- var applyscenariobtn = document.getElementById("applyscenario");
- var applyloadbtn = document.getElementById("applyload");
- var showmodifierdeck = document.getElementById("showmodifierdeck");
+export function init() {
+ const deckspage = document.getElementById("deckspage");
+ const scenariospage = document.getElementById("scenariospage");
+ const applydeckbtn = document.getElementById("applydecks");
+ const applyscenariobtn = document.getElementById("applyscenario");
+ const applyloadbtn = document.getElementById("applyload");
+ const showmodifierdeck = document.getElementById("showmodifierdeck");
- var decklist = new DeckList();
- var scenariolist = new ScenarioList(SCENARIO_DEFINITIONS);
+ const decklist = new DeckList();
+ const scenariolist = new ScenarioList(SCENARIO_DEFINITIONS);
deckspage.insertAdjacentElement("afterbegin", decklist.ul);
scenariospage.insertAdjacentElement("afterbegin", scenariolist.ul);
applydeckbtn.onclick = function () {
localStorage.clear();
- var selected_deck_names = decklist.get_selected_decks();
- write_to_storage("selected_deck_names", JSON.stringify(selected_deck_names));
- var selected_decks = selected_deck_names.map(function (deck_names) {
+ const selected_deck_names = decklist.get_selected_decks();
+ util.write_to_storage("selected_deck_names", JSON.stringify(selected_deck_names));
+ const selected_decks = selected_deck_names.map(function (deck_names) {
return load_ability_deck(deck_names.class, deck_names.name, deck_names.level);
});
apply_deck_selection(selected_decks, true);
- var showmodifierdeck_deckspage = document.getElementById("showmodifierdeck-deckspage");
- var modifier_deck_section = document.getElementById("modifier-container");
+ const showmodifierdeck_deckspage = document.getElementById("showmodifierdeck-deckspage");
+ const modifier_deck_section = document.getElementById("modifier-container");
if(!showmodifierdeck_deckspage.checked){
modifier_deck_section.style.display = "none";
}
@@ -1156,14 +1164,14 @@ function init() {
applyscenariobtn.onclick = function () {
try { localStorage.clear(); } catch (e) { console.error('Local storage is required'); return; }
- var selected_deck_names = scenariolist.get_scenario_decks();
- write_to_storage("selected_deck_names", JSON.stringify(selected_deck_names));
+ const selected_deck_names = scenariolist.get_scenario_decks();
+ util.write_to_storage("selected_deck_names", JSON.stringify(selected_deck_names));
decklist.set_selection(selected_deck_names);
- var selected_decks = selected_deck_names.map(function (deck_names) {
+ const selected_decks = selected_deck_names.map(function (deck_names) {
return load_ability_deck(deck_names.class, deck_names.name, deck_names.level);
});
apply_deck_selection(selected_decks, false);
- var modifier_deck_section = document.getElementById("modifier-container");
+ const modifier_deck_section = document.getElementById("modifier-container");
if(!showmodifierdeck.checked){
modifier_deck_section.style.display = "none";
}
@@ -1172,17 +1180,17 @@ function init() {
}
// assume user is ready to go, so hide the Settings menu
- show_settingspane(settingspane, cancelarea, false);
+ ui.show_settingspane(ui.widgets.settingspane, ui.widgets.cancelarea, false);
};
applyloadbtn.onclick = function () {
- var selected_deck_names = JSON.parse(get_from_storage("selected_deck_names"));
+ const selected_deck_names = JSON.parse(util.get_from_storage("selected_deck_names"));
decklist.set_selection(selected_deck_names);
- var selected_decks = selected_deck_names.map(function (deck_names) {
+ const selected_decks = selected_deck_names.map(function (deck_names) {
return load_ability_deck(deck_names.class, deck_names.name, deck_names.level);
});
apply_deck_selection(selected_decks, true);
- var modifier_deck_section = document.getElementById("modifier-container");
+ const modifier_deck_section = document.getElementById("modifier-container");
if(!showmodifierdeck.checked){
modifier_deck_section.style.display = "none";
}
diff --git a/macros.js b/src/macros.js
similarity index 83%
rename from macros.js
rename to src/macros.js
index 1c743d19..d449f0b7 100644
--- a/macros.js
+++ b/src/macros.js
@@ -1,223 +1,222 @@
-/* Macros used in card text, alphabetical order */
-MACROS =
- { "%air%": " "
- , "%any%": " "
- , "%aoe-4-with-black%": " "
- , "%aoe-circle%": ""
- , "%aoe-circle-with-middle-black%": ""
- , "%aoe-circle-with-side-black%": " "
- , "%aoe-line-3-with-black%": ""
- , "%aoe-line-4-with-black%": ""
- , "%aoe-line-6-with-black%": " "
- , "%aoe-triangle-2-side%": " "
- , "%aoe-triangle-2-side-with-black%": " "
- , "%aoe-triangle-3-side-with-corner-black%": " "
- , "%attack%": "Attack "
- , "%bless%": "BLESS "
- , "%boss-aoe-elder-drake-sp1%": ""
- , "%boss-aoe-inox-bodyguard-sp1%": ""
- , "%boss-aoe-sightless-eye-sp1%": ""
- , "%boss-aoe-sightless-eye-sp2%": ""
- , "%curse%": "CURSE "
- , "%dark%": " "
- , "%disarm%": "DISARM "
- , "%earth%": " "
- , "%fire%": " "
- , "%heal%": "Heal "
- , "%ice%": " "
- , "%immobilize%": "IMMOBILIZE "
- , "%invisible%": "INVISIBLE "
- , "%jump%": "Jump "
- , "%light%": " "
- , "%loot%": "Loot "
- , "%move%": "Move "
- , "%muddle%": "MUDDLE "
- , "%pierce%": "PIERCE "
- , "%poison%": "POISON "
- , "%pull%": "PULL "
- , "%push%": "PUSH "
- , "%range%": "Range "
- , "%retaliate%": "Retaliate "
- , "%shield%": "Shield "
- , "%flying%": " "
- , "%strengthen%": "STRENGTHEN "
- , "%stun%": "STUN "
- , "%target%": "Target "
- , "%use_element%": " "
- , "%wound%": "WOUND "
- };
-
-function expand_macro(macro)
-{
- var key = macro.toLowerCase();
- if (key in MACROS)
- {
- return MACROS[key];
- }
- else
- {
- return macro;
- }
-}
-
-function expand_stat(s, stat, value)
-{
- var re = new RegExp("%" + stat + "% (\\+|-)(\\d*)", "g");
- var line_parsed = re.exec(s);
-
- var has_elite_value = (value.length == 2);
- var normal_attack = value[0];
- //Check in case of bosses with text in the attack (C+1)
- re = new RegExp("(\\d*)(\\+|-)?([a-zA-Z]+)", "i");
- var extra_text_for_particular_bosses = "";
- var value_parsed = re.exec(String(normal_attack));
- if (value_parsed && value_parsed[3])
- {
- var symbol = (value_parsed[2] == "-") ? "-" : "+";
- extra_text_for_particular_bosses = value_parsed[3] + symbol;
- normal_attack = (value_parsed[1] !== "") ? parseInt(value_parsed[1]) : 0;
- }
-
- if (line_parsed) {
- if (line_parsed[1] === "+")
- {
- var value_normal = normal_attack + parseInt(line_parsed[2]);
- if (has_elite_value)
- {
- var value_elite = value[1] + parseInt(line_parsed[2]);
- return ("%" + stat + "% " + value_normal + " / " + value_elite + " ");
- } else
- {
- return ("%" + stat + "% " + extra_text_for_particular_bosses + value_normal);
- }
- } else if (line_parsed[1] === "-")
- {
- var value_normal = normal_attack - parseInt(line_parsed[2]);
- if (has_elite_value)
- {
- var value_elite = value[1] - parseInt(line_parsed[2]);
- return ("%" + stat + "% " + value_normal + " / " + value_elite + " ");
- } else
- {
- return ("%" + stat + "% " + extra_text_for_particular_bosses + value_normal);
- }
- }
- }
-
- return s;
-}
-
-function attributes_to_lines(attributes)
-{
- if (!attributes || (attributes[0].length == 0 && attributes[1].length == 0))
- {
- return [];
- } else
- {
- // To make it more readable, group 3 elements in the same row abd naje them small
- var attributes_lines = ["* Attributes"];
-
- // Write common attributes in white
- var normal_attributes_lines = [];
- var line = 0;
- for (var i=0; i" + line.replace(/(,\s$)/g, "") + "" : "";}));
- }
-}
-
-function immunities_to_lines(immunities)
-{
- if (!immunities)
- {
- return [];
- } else
- {
- // To make it more readable, group 3 elements in the same row abd naje them small
- var immunities_lines = [];
- var line = 0;
- for (var i=0; i" + line.replace(/(,\s$)/g, "") + ""}));
- }
-}
-
-function notes_to_lines(notes)
-{
- return ["* Notes: " + notes + " "];
-}
-
-function expand_special(s, special_value)
-{
- var value = "";
-
- return special_value.map(function(line){
- return ("* " + line);
- });
-}
-
-function special_to_lines(s, special1, special2)
-{
- if (special1 && s.indexOf("Special 1") !== -1)
- {
- s = expand_special(s, special1);
- }
- if (special1 && s.indexOf("Special 2") !== -1)
- {
- s = expand_special(s, special2);
- }
-
- return s;
-}
-
-function expand_string(s, attack, move, range)
-{
- var re = new RegExp("%(attack|move|range)% (\\+|-)(\\d*)", "g");
-
- while (found = re.exec(s))
- {
- if (found[1] === "attack")
- {
- s = s.replace(found[0], expand_stat(found[0], "attack", attack));
- } else if (found[1] === "move")
- {
- s = s.replace(found[0], expand_stat(found[0], "move", move));
- } else if (found[1] === "range")
- {
- s = s.replace(found[0], expand_stat(found[0], "range", range));
- }
- }
-
- return s.replace(/%[^%]*%/gi, expand_macro);
-}
+/* Macros used in card text, alphabetical order */
+const MACROS =
+ { "%air%": " "
+ , "%any%": " "
+ , "%aoe-4-with-black%": " "
+ , "%aoe-circle%": ""
+ , "%aoe-circle-with-middle-black%": ""
+ , "%aoe-circle-with-side-black%": " "
+ , "%aoe-line-3-with-black%": ""
+ , "%aoe-line-4-with-black%": ""
+ , "%aoe-line-6-with-black%": " "
+ , "%aoe-triangle-2-side%": ""
+ , "%aoe-triangle-2-side-with-black%": ""
+ , "%aoe-triangle-3-side-with-corner-black%": ""
+ , "%attack%": "Attack "
+ , "%bless%": "BLESS "
+ , "%boss-aoe-elder-drake-sp1%": ""
+ , "%boss-aoe-inox-bodyguard-sp1%": ""
+ , "%boss-aoe-sightless-eye-sp1%": ""
+ , "%boss-aoe-sightless-eye-sp2%": ""
+ , "%curse%": "CURSE "
+ , "%dark%": " "
+ , "%disarm%": "DISARM "
+ , "%earth%": " "
+ , "%fire%": " "
+ , "%heal%": "Heal "
+ , "%ice%": " "
+ , "%immobilize%": "IMMOBILIZE "
+ , "%invisible%": "INVISIBLE "
+ , "%jump%": "Jump "
+ , "%light%": " "
+ , "%loot%": "Loot "
+ , "%move%": "Move "
+ , "%muddle%": "MUDDLE "
+ , "%pierce%": "PIERCE "
+ , "%poison%": "POISON "
+ , "%pull%": "PULL "
+ , "%push%": "PUSH "
+ , "%range%": "Range "
+ , "%retaliate%": "Retaliate "
+ , "%shield%": "Shield "
+ , "%flying%": " "
+ , "%strengthen%": "STRENGTHEN "
+ , "%stun%": "STUN "
+ , "%target%": "Target "
+ , "%use_element%": " "
+ , "%wound%": "WOUND "
+ };
+
+function expand_macro(macro)
+{
+ const key = macro.toLowerCase();
+ if (key in MACROS)
+ {
+ return MACROS[key];
+ }
+ else
+ {
+ return macro;
+ }
+}
+
+function expand_stat(s, stat, value)
+{
+ let re = new RegExp("%" + stat + "% (\\+|-)(\\d*)", "g");
+ const line_parsed = re.exec(s);
+
+ const has_elite_value = (value.length === 2);
+ let normal_attack = value[0];
+ //Check in case of bosses with text in the attack (C+1)
+ re = new RegExp("(\\d*)([+\\-])?([a-zA-Z]+)", "i");
+ let extra_text_for_particular_bosses = "";
+ const value_parsed = re.exec(String(normal_attack));
+ if (value_parsed && value_parsed[3])
+ {
+ const symbol = (value_parsed[2] === "-") ? "-" : "+";
+ extra_text_for_particular_bosses = value_parsed[3] + symbol;
+ normal_attack = (value_parsed[1] !== "") ? parseInt(value_parsed[1]) : 0;
+ }
+
+ if (line_parsed) {
+ if (line_parsed[1] === "+")
+ {
+ const value_normal = normal_attack + parseInt(line_parsed[2]);
+ if (has_elite_value)
+ {
+ const value_elite = value[1] + parseInt(line_parsed[2]);
+ return ("%" + stat + "% " + value_normal + " / " + value_elite + " ");
+ } else
+ {
+ return ("%" + stat + "% " + extra_text_for_particular_bosses + value_normal);
+ }
+ } else if (line_parsed[1] === "-")
+ {
+ const value_normal = normal_attack - parseInt(line_parsed[2]);
+ if (has_elite_value)
+ {
+ const value_elite = value[1] - parseInt(line_parsed[2]);
+ return ("%" + stat + "% " + value_normal + " / " + value_elite + " ");
+ } else
+ {
+ return ("%" + stat + "% " + extra_text_for_particular_bosses + value_normal);
+ }
+ }
+ }
+
+ return s;
+}
+
+export function attributes_to_lines(attributes)
+{
+ if (!attributes || (attributes[0].length === 0 && attributes[1].length === 0))
+ {
+ return [];
+ } else
+ {
+ // To make it more readable, group 3 elements in the same row abd naje them small
+ let attributes_lines = ["* Attributes"];
+
+ // Write common attributes in white
+ const normal_attributes_lines = [];
+ let line = 0;
+ for (let i=0; i" + line.replace(/(,\s$)/g, "") + "" : "";}));
+ }
+}
+
+export function immunities_to_lines(immunities)
+{
+ if (!immunities)
+ {
+ return [];
+ } else
+ {
+ // To make it more readable, group 3 elements in the same row abd naje them small
+ const immunities_lines = [];
+ let line = 0;
+ for (let i=0; i" + line.replace(/(,\s$)/g, "") + ""}));
+ }
+}
+
+export function notes_to_lines(notes)
+{
+ return ["* Notes: " + notes + " "];
+}
+
+function expand_special(s, special_value)
+{
+ return special_value.map(function(line){
+ return ("* " + line);
+ });
+}
+
+export function special_to_lines(s, special1, special2)
+{
+ if (special1 && s.indexOf("Special 1") !== -1)
+ {
+ s = expand_special(s, special1);
+ }
+ if (special1 && s.indexOf("Special 2") !== -1)
+ {
+ s = expand_special(s, special2);
+ }
+
+ return s;
+}
+
+export function expand_string(s, attack, move, range)
+{
+ const re = new RegExp("%(attack|move|range)% ([+\\-])(\\d*)", "g");
+ let found = re.exec(s);
+ while (found)
+ {
+ if (found[1] === "attack")
+ {
+ s = s.replace(found[0], expand_stat(found[0], "attack", attack));
+ } else if (found[1] === "move")
+ {
+ s = s.replace(found[0], expand_stat(found[0], "move", move));
+ } else if (found[1] === "range")
+ {
+ s = s.replace(found[0], expand_stat(found[0], "range", range));
+ }
+ found = re.exec(s)
+ }
+
+ return s.replace(/%[^%]*%/gi, expand_macro);
+}
diff --git a/modifiers.js b/src/modifiers.js
similarity index 63%
rename from modifiers.js
rename to src/modifiers.js
index 08332cb7..7a0668c2 100644
--- a/modifiers.js
+++ b/src/modifiers.js
@@ -1,47 +1,47 @@
-var CARD_TYPES_MODIFIER =
-{
- BLESS: "bless",
- CURSE: "curse",
- PLUS0: "plus0",
- PLUS1: "plus1",
- PLUS2: "plus2",
- MINUS1: "minus1",
- MINUS2: "minus2",
- NULL: "null",
- DOUBLE: "double"
-};
-
-var MODIFIER_CARDS =
- { BLESS: { 'type': CARD_TYPES_MODIFIER.BLESS, 'shuffle': false, 'image': 'images/attack_mod_bless.jpg' }
- , CURSE: { 'type': CARD_TYPES_MODIFIER.CURSE, 'shuffle': false, 'image': 'images/attack_mod_curse.jpg' }
- , PLUS0: { 'type': CARD_TYPES_MODIFIER.PLUS0, 'shuffle': false, 'image': 'images/attack_mod_+0.jpg' }
- , PLUS1: { 'type': CARD_TYPES_MODIFIER.PLUS1, 'shuffle': false, 'image': 'images/attack_mod_+1.jpg' }
- , PLUS2: { 'type': CARD_TYPES_MODIFIER.PLUS2, 'shuffle': false, 'image': 'images/attack_mod_+2.jpg' }
- , MINUS1: { 'type': CARD_TYPES_MODIFIER.MINUS1, 'shuffle': false, 'image': 'images/attack_mod_-1.jpg' }
- , MINUS2: { 'type': CARD_TYPES_MODIFIER.MINUS2, 'shuffle': false, 'image': 'images/attack_mod_-2.jpg' }
- , NULL: { 'type': CARD_TYPES_MODIFIER.NULL, 'shuffle': true, 'image': 'images/attack_mod_null.jpg' }
- , DOUBLE: { 'type': CARD_TYPES_MODIFIER.DOUBLE, 'shuffle': true, 'image': 'images/attack_mod_2x.jpg' }
- };
-
-var MODIFIER_DECK =
- [ MODIFIER_CARDS.PLUS0,
- , MODIFIER_CARDS.PLUS0,
- , MODIFIER_CARDS.PLUS0,
- , MODIFIER_CARDS.PLUS0,
- , MODIFIER_CARDS.PLUS0,
- , MODIFIER_CARDS.PLUS0,
- , MODIFIER_CARDS.PLUS1,
- , MODIFIER_CARDS.PLUS1,
- , MODIFIER_CARDS.PLUS1,
- , MODIFIER_CARDS.PLUS1,
- , MODIFIER_CARDS.PLUS1,
- , MODIFIER_CARDS.MINUS1,
- , MODIFIER_CARDS.MINUS1,
- , MODIFIER_CARDS.MINUS1,
- , MODIFIER_CARDS.MINUS1,
- , MODIFIER_CARDS.MINUS1,
- , MODIFIER_CARDS.PLUS2,
- , MODIFIER_CARDS.MINUS2,
- , MODIFIER_CARDS.NULL,
- , MODIFIER_CARDS.DOUBLE,
- ];
\ No newline at end of file
+export const CARD_TYPES_MODIFIER =
+{
+ BLESS: "bless",
+ CURSE: "curse",
+ PLUS0: "plus0",
+ PLUS1: "plus1",
+ PLUS2: "plus2",
+ MINUS1: "minus1",
+ MINUS2: "minus2",
+ NULL: "null",
+ DOUBLE: "double"
+};
+
+export const MODIFIER_CARDS =
+ { BLESS: { 'type': CARD_TYPES_MODIFIER.BLESS, 'shuffle': false, 'image': 'images/attack_mod_bless.jpg' }
+ , CURSE: { 'type': CARD_TYPES_MODIFIER.CURSE, 'shuffle': false, 'image': 'images/attack_mod_curse.jpg' }
+ , PLUS0: { 'type': CARD_TYPES_MODIFIER.PLUS0, 'shuffle': false, 'image': 'images/attack_mod_+0.jpg' }
+ , PLUS1: { 'type': CARD_TYPES_MODIFIER.PLUS1, 'shuffle': false, 'image': 'images/attack_mod_+1.jpg' }
+ , PLUS2: { 'type': CARD_TYPES_MODIFIER.PLUS2, 'shuffle': false, 'image': 'images/attack_mod_+2.jpg' }
+ , MINUS1: { 'type': CARD_TYPES_MODIFIER.MINUS1, 'shuffle': false, 'image': 'images/attack_mod_-1.jpg' }
+ , MINUS2: { 'type': CARD_TYPES_MODIFIER.MINUS2, 'shuffle': false, 'image': 'images/attack_mod_-2.jpg' }
+ , NULL: { 'type': CARD_TYPES_MODIFIER.NULL, 'shuffle': true, 'image': 'images/attack_mod_null.jpg' }
+ , DOUBLE: { 'type': CARD_TYPES_MODIFIER.DOUBLE, 'shuffle': true, 'image': 'images/attack_mod_2x.jpg' }
+ };
+
+export const MODIFIER_DECK =
+ [ MODIFIER_CARDS.PLUS0
+ , MODIFIER_CARDS.PLUS0
+ , MODIFIER_CARDS.PLUS0
+ , MODIFIER_CARDS.PLUS0
+ , MODIFIER_CARDS.PLUS0
+ , MODIFIER_CARDS.PLUS0
+ , MODIFIER_CARDS.PLUS1
+ , MODIFIER_CARDS.PLUS1
+ , MODIFIER_CARDS.PLUS1
+ , MODIFIER_CARDS.PLUS1
+ , MODIFIER_CARDS.PLUS1
+ , MODIFIER_CARDS.MINUS1
+ , MODIFIER_CARDS.MINUS1
+ , MODIFIER_CARDS.MINUS1
+ , MODIFIER_CARDS.MINUS1
+ , MODIFIER_CARDS.MINUS1
+ , MODIFIER_CARDS.PLUS2
+ , MODIFIER_CARDS.MINUS2
+ , MODIFIER_CARDS.NULL
+ , MODIFIER_CARDS.DOUBLE
+ ];
diff --git a/monster_stats.js b/src/monster_stats.js
similarity index 95%
rename from monster_stats.js
rename to src/monster_stats.js
index 6278ee86..d802bf02 100644
--- a/monster_stats.js
+++ b/src/monster_stats.js
@@ -1,8264 +1,8264 @@
-SPECIAL_VALUES =
-{
- "X": "X = Hexes moved",
- "C": "C = Number of Characters",
- "V": "V = Number of Scouts present"
-}
-
-MONSTER_STATS = {
- "monsters": {
- "Ancient Artillery": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 0,
- "attack": 2,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 0,
- "attack": 3,
- "range": 5,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 0,
- "attack": 2,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 0,
- "attack": 3,
- "range": 5,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 0,
- "attack": 2,
- "range": 5,
- "attributes": []
- },
- "elite": {
- "health": 11,
- "move": 0,
- "attack": 3,
- "range": 6,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 8,
- "move": 0,
- "attack": 3,
- "range": 5,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 0,
- "attack": 4,
- "range": 6,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 9,
- "move": 0,
- "attack": 4,
- "range": 5,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 0,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%target% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 0,
- "attack": 4,
- "range": 6,
- "attributes": []
- },
- "elite": {
- "health": 15,
- "move": 0,
- "attack": 4,
- "range": 7,
- "attributes": [
- "%target% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 14,
- "move": 0,
- "attack": 4,
- "range": 6,
- "attributes": []
- },
- "elite": {
- "health": 16,
- "move": 0,
- "attack": 5,
- "range": 7,
- "attributes": [
- "%target% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 16,
- "move": 0,
- "attack": 4,
- "range": 7,
- "attributes": []
- },
- "elite": {
- "health": 20,
- "move": 0,
- "attack": 5,
- "range": 7,
- "attributes": [
- "%target% 2"
- ]
- }
- }
- ]
- },
- "Bandit Archer": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 2,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 6,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 2,
- "attack": 3,
- "range": 5,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 2,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 3,
- "attack": 3,
- "range": 5,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 8,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 5,
- "attributes": []
- },
- "elite": {
- "health": 12,
- "move": 4,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 4,
- "attack": 5,
- "range": 6,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 13,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": []
- },
- "elite": {
- "health": 17,
- "move": 4,
- "attack": 5,
- "range": 6,
- "attributes": [
- "%poison%"
- ]
- }
- }
- ]
- },
- "Bandit Guard": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 10,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 11,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%muddle%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 12,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%muddle%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 14,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 14,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%muddle%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 16,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%muddle%",
- "%shield% 3"
- ]
- }
- }
- ]
- },
- "Black Imp": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 3,
- "move": 1,
- "attack": 1,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 4,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 4,
- "move": 1,
- "attack": 1,
- "range": 3,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 6,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 5,
- "move": 1,
- "attack": 1,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 8,
- "move": 1,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 5,
- "move": 1,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 8,
- "move": 1,
- "attack": 3,
- "range": 4,
- "attributes": [
- "Attackers gain Disadvantage",
- "%poison%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 7,
- "move": 1,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 11,
- "move": 1,
- "attack": 3,
- "range": 4,
- "attributes": [
- "Attackers gain Disadvantage",
- "%poison%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 9,
- "move": 1,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 12,
- "move": 1,
- "attack": 3,
- "range": 5,
- "attributes": [
- "Attackers gain Disadvantage",
- "%poison%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 10,
- "move": 1,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 14,
- "move": 1,
- "attack": 4,
- "range": 5,
- "attributes": [
- "Attackers gain Disadvantage",
- "%poison%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 12,
- "move": 1,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 17,
- "move": 1,
- "attack": 4,
- "range": 5,
- "attributes": [
- "Attackers gain Disadvantage",
- "%poison%"
- ]
- }
- }
- ]
- },
- "Cave Bear": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 7,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 11,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 11,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 17,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 13,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 20,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 16,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 21,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 17,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 24,
- "move": 5,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 19,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 28,
- "move": 5,
- "attack": 7,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 22,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 33,
- "move": 5,
- "attack": 7,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- }
- ]
- },
- "City Archer": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 6,
- "move": 1,
- "attack": 3,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 1,
- "attack": 2,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 6,
- "move": 1,
- "attack": 3,
- "range": 5,
- "attributes": [
- "%pierce% 1",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 6,
- "move": 1,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 1,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%pierce% 2",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 6,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 8,
- "move": 2,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%pierce% 2",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 8,
- "move": 2,
- "attack": 3,
- "range": 5,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 10,
- "move": 2,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%pierce% 2",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 9,
- "move": 2,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 2,
- "attack": 5,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 12,
- "move": 3,
- "attack": 6,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 13,
- "move": 3,
- "attack": 6,
- "range": 7,
- "attributes": [
- "%pierce% 3",
- "%shield% 3"
- ]
- }
- }
- ]
- },
- "City Guard": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 6,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 6,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 8,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 1",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 12,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 13,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 13,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%retaliate% 3",
- "%shield% 3"
- ]
- }
- }
- ]
- },
- "Cultist": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 2,
- "attack": 1,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 1,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 1,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 12,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 1,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 15,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- },
- "elite": {
- "health": 18,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 14,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- },
- "elite": {
- "health": 22,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 15,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- },
- "elite": {
- "health": 25,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%curse%"
- ]
- }
- }
- ]
- },
- "Deep Terror": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 3,
- "move": 0,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 5,
- "move": 0,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 4,
- "move": 0,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 6,
- "move": 0,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 4,
- "move": 0,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 7,
- "move": 0,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 5,
- "move": 0,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 8,
- "move": 0,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 6,
- "move": 0,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 9,
- "move": 0,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 7,
- "move": 0,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 11,
- "move": 0,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 8,
- "move": 0,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 13,
- "move": 0,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 9,
- "move": 0,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- },
- "elite": {
- "health": 15,
- "move": 0,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- }
- ]
- },
- "Earth Demon": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 7,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 9,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 12,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 18,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 13,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 20,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 15,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 21,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 17,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- },
- "elite": {
- "health": 25,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 20,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- },
- "elite": {
- "health": 27,
- "move": 3,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 22,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- },
- "elite": {
- "health": 32,
- "move": 3,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%immobilize%"
- ]
- }
- }
- ]
- },
- "Flame Demon": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 2,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 2,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%flying%",
- "%retaliate% 2: %range% 2",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 4,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%retaliate% 3: %range% 2",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%retaliate% 2: %range% 2",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 5,
- "move": 3,
- "attack": 3,
- "range": 5,
- "attributes": [
- "%flying%",
- "%retaliate% 3: %range% 3",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 3,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%retaliate% 3: %range% 2",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 5,
- "move": 4,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%flying%",
- "%retaliate% 4: %range% 3",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 4,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%retaliate% 3: %range% 2",
- "%shield% 4"
- ]
- },
- "elite": {
- "health": 6,
- "move": 4,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%flying%",
- "%retaliate% 4: %range% 3",
- "%shield% 5"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 4,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%retaliate% 4: %range% 2",
- "%shield% 4"
- ]
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%flying%",
- "%retaliate% 5: %range% 3",
- "%shield% 5"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 5,
- "move": 4,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%flying%",
- "%retaliate% 4: %range% 3",
- "%shield% 4"
- ]
- },
- "elite": {
- "health": 8,
- "move": 4,
- "attack": 5,
- "range": 6,
- "attributes": [
- "%flying%",
- "%retaliate% 5: %range% 4",
- "%shield% 5"
- ]
- }
- }
- ]
- },
- "Frost Demon": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 12,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 8,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 14,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 18,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 20,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 22,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 14,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 25,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- }
- ]
- },
- "Forest Imp": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 1,
- "move": 3,
- "attack": 1,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 4,
- "move": 3,
- "attack": 1,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 2,
- "move": 3,
- "attack": 1,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 5,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 2,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 6,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 3,
- "move": 4,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 3,
- "move": 4,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 4,
- "move": 4,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 8,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 4,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 9,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 6,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%curse%",
- "%shield% 2"
- ]
- }
- }
- ]
- },
- "Giant Viper": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 2,
- "move": 2,
- "attack": 1,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 3,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 3,
- "move": 2,
- "attack": 1,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 4,
- "move": 3,
- "attack": 1,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 7,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 4,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 8,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 11,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 7,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 13,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 8,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 14,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 10,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 17,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- }
- ]
- },
- "Harrower Infester": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 6,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 12,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 12,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 8,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 10,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 17,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 19,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 21,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 15,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- },
- "elite": {
- "health": 22,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 17,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- },
- "elite": {
- "health": 26,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- }
- ]
- },
- "Hound": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 6,
- "move": 5,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 4,
- "move": 4,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 6,
- "move": 5,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 6,
- "move": 4,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 7,
- "move": 5,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 8,
- "move": 4,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 8,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 8,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 9,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 12,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 11,
- "move": 5,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 15,
- "move": 6,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 15,
- "move": 5,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 15,
- "move": 6,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- }
- ]
- },
- "Inox Archer": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 2,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 2,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 8,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 8,
- "move": 2,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 11,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 2,
- "attack": 4,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 17,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 19,
- "move": 3,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 15,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 23,
- "move": 3,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%wound%"
- ]
- }
- }
- ]
- },
- "Inox Guard": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 8,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 12,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 15,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 17,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 3"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 13,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 19,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 1"
- ]
- },
- "elite": {
- "health": 21,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 19,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%retaliate% 2"
- ]
- },
- "elite": {
- "health": 23,
- "move": 3,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%retaliate% 4"
- ]
- }
- }
- ]
- },
- "Inox Shaman": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 6,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 3,
- "attributes": []
- },
- "elite": {
- "health": 11,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 9,
- "move": 2,
- "attack": 2,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 10,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 13,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 20,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 15,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 24,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": []
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": []
- },
- "elite": {
- "health": 27,
- "move": 4,
- "attack": 5,
- "range": 4,
- "attributes": []
- }
- }
- ]
- },
- "Living Bones": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 1,
- "range": 0,
- "attributes": [
- "%target% 2"
- ]
- },
- "elite": {
- "health": 6,
- "move": 4,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 2"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 1,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 6,
- "move": 4,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 7,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 10,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 7,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 10,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 6,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 13,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 14,
- "move": 6,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 3",
- "%shield% 2"
- ]
- }
- }
- ]
- },
- "Living Corpse": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 7,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 1,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 9,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 1,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 10,
- "move": 1,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 11,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 15,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 13,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 17,
- "move": 2,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 14,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 21,
- "move": 2,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 15,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 25,
- "move": 2,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- }
- }
- ]
- },
- "Living Spirit": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 2,
- "move": 2,
- "attack": 2,
- "range": 2,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 2,
- "move": 2,
- "attack": 2,
- "range": 2,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 2,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 3,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 4,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 4,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 4,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 6,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 4,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%flying%",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 9,
- "move": 4,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%flying%",
- "%shield% 4"
- ]
- }
- }
- ]
- },
- "Lurker": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 2"
- ]
- },
- "elite": {
- "health": 7,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 1"
- ]
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 1",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 1"
- ]
- },
- "elite": {
- "health": 12,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 2",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 2"
- ]
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 2",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 10,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 14,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 2",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 15,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 12,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 3",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 16,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 4",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 14,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 3",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 18,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%target% 2",
- "%pierce% 4",
- "%shield% 2"
- ]
- }
- }
- ]
- },
- "Ooze": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 4,
- "move": 1,
- "attack": 2,
- "range": 2,
- "attributes": []
- },
- "elite": {
- "health": 8,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 1,
- "attack": 2,
- "range": 2,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 9,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 1,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 1,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 8,
- "move": 1,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%poison%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 13,
- "move": 2,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%poison%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 10,
- "move": 2,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%poison%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 15,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%poison%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 12,
- "move": 2,
- "attack": 4,
- "range": 3,
- "attributes": [
- "%poison%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%poison%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 14,
- "move": 2,
- "attack": 4,
- "range": 3,
- "attributes": [
- "%poison%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 18,
- "move": 3,
- "attack": 5,
- "range": 4,
- "attributes": [
- "%poison%",
- "%shield% 2"
- ]
- }
- }
- ]
- },
- "Night Demon": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 5,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 8,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 7,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 13,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 8,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 15,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 17,
- "move": 5,
- "attack": 6,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 14,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 21,
- "move": 5,
- "attack": 6,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 15,
- "move": 4,
- "attack": 6,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- },
- "elite": {
- "health": 21,
- "move": 5,
- "attack": 8,
- "range": 0,
- "attributes": [
- "Attackers gain Disadvantage"
- ]
- }
- }
- ]
- },
- "Rending Drake": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 7,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 9,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 7,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 10,
- "move": 5,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 9,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 11,
- "move": 6,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 10,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 14,
- "move": 6,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 11,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 15,
- "move": 6,
- "attack": 7,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 14,
- "move": 5,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- },
- "elite": {
- "health": 18,
- "move": 6,
- "attack": 7,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- }
- ]
- },
- "Savvas Icestorm": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%pierce% 3"
- ]
- },
- "elite": {
- "health": 12,
- "move": 2,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%pierce% 3"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 10,
- "move": 2,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%pierce% 3"
- ]
- },
- "elite": {
- "health": 12,
- "move": 2,
- "attack": 3,
- "range": 5,
- "attributes": [
- "%pierce% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%pierce% 3"
- ]
- },
- "elite": {
- "health": 15,
- "move": 3,
- "attack": 3,
- "range": 5,
- "attributes": [
- "%pierce% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%pierce% 3",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 18,
- "move": 3,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 14,
- "move": 3,
- "attack": 3,
- "range": 5,
- "attributes": [
- "%pierce% 3",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 19,
- "move": 4,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%pierce% 3",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 21,
- "move": 4,
- "attack": 5,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 5,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 23,
- "move": 4,
- "attack": 6,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 17,
- "move": 4,
- "attack": 4,
- "range": 6,
- "attributes": [
- "%pierce% 3",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 24,
- "move": 4,
- "attack": 6,
- "range": 6,
- "attributes": [
- "%pierce% 4",
- "%shield% 3"
- ]
- }
- }
- ]
- },
- "Savvas Lavaflow": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 8,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 13,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 9,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 15,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%wound%"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 18,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 14,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 21,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 16,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%"
- ]
- },
- "elite": {
- "health": 24,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 18,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- },
- "elite": {
- "health": 27,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 20,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- },
- "elite": {
- "health": 30,
- "move": 4,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 24,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- },
- "elite": {
- "health": 35,
- "move": 4,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%poison%",
- "%wound%"
- ]
- }
- }
- ]
- },
- "Spitting Drake": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%"]
- },
- "elite": {
- "health": 8,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%"]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%"]
- },
- "elite": {
- "health": 9,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 8,
- "move": 3,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- },
- "elite": {
- "health": 10,
- "move": 3,
- "attack": 5,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 8,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- },
- "elite": {
- "health": 12,
- "move": 3,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 9,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- },
- "elite": {
- "health": 14,
- "move": 4,
- "attack": 5,
- "range": 5,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 12,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- },
- "elite": {
- "health": 16,
- "move": 4,
- "attack": 6,
- "range": 5,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 13,
- "move": 4,
- "attack": 5,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- },
- "elite": {
- "health": 19,
- "move": 4,
- "attack": 6,
- "range": 5,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 16,
- "move": 4,
- "attack": 5,
- "range": 4,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- },
- "elite": {
- "health": 21,
- "move": 4,
- "attack": 7,
- "range": 5,
- "attributes": [
- "%flying%",
- "%muddle%"
- ]
- }
- }
- ]
- },
- "Stone Golem": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 10,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 10,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 10,
- "move": 1,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 11,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 11,
- "move": 1,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 14,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 11,
- "move": 1,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 15,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 12,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 17,
- "move": 2,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 13,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 19,
- "move": 3,
- "attack": 6,
- "range": 0,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 16,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 20,
- "move": 3,
- "attack": 7,
- "range": 0,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 16,
- "move": 2,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 21,
- "move": 3,
- "attack": 7,
- "range": 0,
- "attributes": [
- "%shield% 4"
- ]
- }
- }
- ]
- },
- "Sun Demon": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 5,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 9,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 7,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 12,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 9,
- "move": 2,
- "attack": 2,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 13,
- "move": 2,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 10,
- "move": 2,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 15,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 16,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 11,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 16,
- "move": 3,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 12,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 18,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 15,
- "move": 3,
- "attack": 4,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 22,
- "move": 4,
- "attack": 5,
- "range": 0,
- "attributes": [
- "%flying%",
- "Advantage",
- "%shield% 2"
- ]
- }
- }
- ]
- },
- "Vermling Scout": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 2,
- "move": 3,
- "attack": 1,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 4,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 1,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 5,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 5,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 2,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 7,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 6,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 8,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 8,
- "move": 3,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 9,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 12,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 11,
- "move": 4,
- "attack": 3,
- "range": 0,
- "attributes": []
- },
- "elite": {
- "health": 15,
- "move": 5,
- "attack": 4,
- "range": 0,
- "attributes": []
- }
- }
- ]
- },
- "Vermling Shaman": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 2,
- "move": 2,
- "attack": 1,
- "range": 3,
- "attributes": [
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%shield% 2"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 2,
- "move": 2,
- "attack": 1,
- "range": 3,
- "attributes": [
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 3,
- "move": 2,
- "attack": 1,
- "range": 4,
- "attributes": [
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 4,
- "move": 3,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 3,
- "move": 2,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 5,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%shield% 3"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 5,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 4,
- "move": 3,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 6,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 4"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 5,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 6,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 5"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 7,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 8,
- "move": 3,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%muddle%",
- "%shield% 5"
- ]
- }
- }
- ]
- },
- "Wind Demon": {
- "level": [
- {
- "level": 0,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- },
- "elite": {
- "health": 5,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 1"
- ]
- }
- },
- {
- "level": 1,
- "normal": {
- "health": 3,
- "move": 3,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 5,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 2,
- "normal": {
- "health": 4,
- "move": 4,
- "attack": 2,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 7,
- "move": 5,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 3,
- "normal": {
- "health": 5,
- "move": 4,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 8,
- "move": 5,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 4,
- "normal": {
- "health": 7,
- "move": 4,
- "attack": 3,
- "range": 3,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 8,
- "move": 5,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%disarm%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 5,
- "normal": {
- "health": 9,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 2"
- ]
- },
- "elite": {
- "health": 11,
- "move": 5,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%disarm%",
- "%shield% 2"
- ]
- }
- },
- {
- "level": 6,
- "normal": {
- "health": 10,
- "move": 4,
- "attack": 3,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 12,
- "move": 5,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%disarm%",
- "%shield% 3"
- ]
- }
- },
- {
- "level": 7,
- "normal": {
- "health": 11,
- "move": 4,
- "attack": 4,
- "range": 4,
- "attributes": [
- "%flying%",
- "%shield% 3"
- ]
- },
- "elite": {
- "health": 13,
- "move": 5,
- "attack": 5,
- "range": 4,
- "attributes": [
- "%flying%",
- "%disarm%",
- "%shield% 3"
- ]
- }
- }
- ]
- }
- },
- "bosses": {
- "Bandit Commander": {
- "level": [
- {
- "level": 0,
- "health": "8xC",
- "move": 3,
- "attack": 3,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "10xC",
- "move": 3,
- "attack": 3,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "12xC",
- "move": 4,
- "attack": 3,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "13xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "15xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "16xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "19xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "23xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "Move to next door and reveal room"
- ],
- "special2": [
- "Summon Living Bones"
- ],
- "immunities": [
- "%stun%",
- "%immobilize%",
- "%curse%"
- ],
- "notes": ""
- }
- ]
- },
- "The Betrayer": {
- "level": [
- {
- "level": 0,
- "health": "10xC",
- "move": 3,
- "attack": 4,
- "range": 3,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "12xC",
- "move": 3,
- "attack": 5,
- "range": 3,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "14xC",
- "move": 3,
- "attack": 6,
- "range": 4,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "16xC",
- "move": 4,
- "attack": 7,
- "range": 4,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "18xC",
- "move": 4,
- "attack": 8,
- "range": 4,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "20xC",
- "move": 5,
- "attack": 8,
- "range": 5,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "23xC",
- "move": 5,
- "attack": 9,
- "range": 5,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "27xC",
- "move": 5,
- "attack": 9,
- "range": 5,
- "special1": [
- "Summon Giant Viper and Fear"
- ],
- "special2": [
- "Mind Control"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%stun%",
- "%disarm%",
- "%curse%"
- ],
- "notes": ""
- }
- ]
- },
- "Captain of the Guard": {
- "level": [
- {
- "level": 0,
- "health": "7xC",
- "move": 2,
- "attack": 3,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "9xC",
- "move": 2,
- "attack": 3,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "11xC",
- "move": 2,
- "attack": 4,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "14xC",
- "move": 3,
- "attack": 4,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "16xC",
- "move": 3,
- "attack": 5,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "20xC",
- "move": 3,
- "attack": 5,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "21xC",
- "move": 4,
- "attack": 6,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "25xC",
- "move": 4,
- "attack": 6,
- "range": 0,
- "special1": [
- "%heal% 2, Affect self and all allies"
- ],
- "special2": [
- "All allies add +1 Attack to all attacks this round",
- "%attack% +1"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- }
- ]
- },
- "The Colorless": {
- "level": [
- {
- "level": 0,
- "health": "9xC",
- "move": 3,
- "attack": 2,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 4, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "10xC",
- "move": 3,
- "attack": 3,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 4, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "11xC",
- "move": 4,
- "attack": 3,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 5, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "12xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 5, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "14xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 6, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "15xC",
- "move": 4,
- "attack": 5,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 6, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "17xC",
- "move": 4,
- "attack": 6,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 7, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "19xC",
- "move": 5,
- "attack": 7,
- "range": 0,
- "special1": [
- "%dark%%use_element%: Summon Night Demon",
- "%invisible%, Self"
- ],
- "special2": [
- "%light%%use_element%: Summon Sun Demon",
- "%heal% 7, Self",
- "%shield% 1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%disarm%"
- ],
- "notes": ""
- }
- ]
- },
- "Dark Rider": {
- "level": [
- {
- "level": 0,
- "health": "9xC",
- "move": 2,
- "attack": "3+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 1,
- "health": "10xC",
- "move": 3,
- "attack": "3+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 2,
- "health": "12xC",
- "move": 3,
- "attack": "3+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 3,
- "health": "13xC",
- "move": 3,
- "attack": "4+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 4,
- "health": "15xC",
- "move": 3,
- "attack": "4+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 5,
- "health": "16xC",
- "move": 3,
- "attack": "5+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 6,
- "health": "16xC",
- "move": 4,
- "attack": "5+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- },
- {
- "level": 7,
- "health": "18xC",
- "move": 4,
- "attack": "6+X",
- "range": 0,
- "special1": [
- "%move% +2",
- "%attack% +0"
- ],
- "special2": [
- "%move% +0",
- "Summon Imp",
- "%attack% -1"
- ],
- "immunities": [
- "%immobilize%",
- "%poison%",
- "%stun%",
- "%disarm%"
- ],
- "notes": "X = Hexes moved"
- }
- ]
- },
- "Elder Drake": {
- "level": [
- {
- "level": 0,
- "health": "11xC",
- "move": 0,
- "attack": 3,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "12xC",
- "move": 0,
- "attack": 4,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "15xC",
- "move": 0,
- "attack": 4,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "16xC",
- "move": 0,
- "attack": 5,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "20xC",
- "move": 0,
- "attack": 5,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "22xC",
- "move": 0,
- "attack": 6,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "27xC",
- "move": 0,
- "attack": 6,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "29xC",
- "move": 0,
- "attack": 7,
- "range": 0,
- "special1": [
- "%attack% +0 %boss-aoe-elder-drake-sp1%"
- ],
- "special2": [
- "Summon 2 Zephyrs and %move%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%stun%"
- ],
- "notes": ""
- }
- ]
- },
- "The Gloom": {
- "level": [
- {
- "level": 0,
- "health": "20xC",
- "move": 2,
- "attack": 5,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "25xC",
- "move": 2,
- "attack": 5,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "29xC",
- "move": 2,
- "attack": 6,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "35xC",
- "move": 2,
- "attack": 6,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "39xC",
- "move": 3,
- "attack": 7,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "46xC",
- "move": 3,
- "attack": 7,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "50xC",
- "move": 3,
- "attack": 8,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "56xC",
- "move": 3,
- "attack": 9,
- "range": 0,
- "special1": [
- "%move% +9",
- "%attack% +9"
- ],
- "special2": [
- "Teleport",
- "%attack% +1",
- "%range% 5",
- "%poison%",
- "%wound%",
- "%stun%"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- }
- ]
- },
- "Inox Bodyguard": {
- "level": [
- {
- "level": 0,
- "health": "6xC",
- "move": 2,
- "attack": "C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 3"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 1,
- "health": "7xC",
- "move": 2,
- "attack": "1+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 3"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 2,
- "health": "9xC",
- "move": 2,
- "attack": "1+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 3"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 3,
- "health": "10xC",
- "move": 3,
- "attack": "2+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 4"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 4,
- "health": "11xC",
- "move": 3,
- "attack": "2+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 4"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 5,
- "health": "13xC",
- "move": 3,
- "attack": "3+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 5"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 6,
- "health": "15xC",
- "move": 4,
- "attack": "3+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 5"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- },
- {
- "level": 7,
- "health": "17xC",
- "move": 4,
- "attack": "4+C",
- "range": 0,
- "special1": [
- "%move% -1",
- "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
- ],
- "special2": [
- "%move% +0",
- "%attack% +0",
- "%retaliate% 5"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%"
- ],
- "notes": "C = Number of Characters"
- }
- ]
- },
- "Jekserah": {
- "level": [
- {
- "level": 0,
- "health": "6xC",
- "move": 2,
- "attack": 2,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "7xC",
- "move": 2,
- "attack": 3,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "9xC",
- "move": 3,
- "attack": 3,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "12xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "13xC",
- "move": 4,
- "attack": 5,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "15xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "18xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "22xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "Summon Living Bones",
- "%attack% -1, Target all adjacent enemies"
- ],
- "special2": [
- "Summon Living Corpse",
- "%move% -1",
- "%attack% +2"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": ""
- }
- ]
- },
- "Merciless Overseer": {
- "level": [
- {
- "level": 0,
- "health": "6xC",
- "move": 2,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 1,
- "health": "8xC",
- "move": 2,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 2,
- "health": "9xC",
- "move": 3,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 3,
- "health": "11xC",
- "move": 3,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 4,
- "health": "12xC",
- "move": 4,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 5,
- "health": "14xC",
- "move": 4,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 6,
- "health": "16xC",
- "move": 4,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- },
- {
- "level": 7,
- "health": "19xC",
- "move": 4,
- "attack": "V",
- "range": 0,
- "special1": [
- "All Scouts act again"
- ],
- "special2": [
- "Summon Vermling Scout"
- ],
- "immunities": [
- "%disarm%",
- "%wound%",
- "%curse%",
- "%stun%"
- ],
- "notes": "V = Number of Scouts present"
- }
- ]
- },
- "Prime Demon": {
- "level": [
- {
- "level": 0,
- "health": "8xC",
- "move": 3,
- "attack": 4,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "9xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "10xC",
- "move": 4,
- "attack": 5,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "12xC",
- "move": 4,
- "attack": 6,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "14xC",
- "move": 5,
- "attack": 6,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "16xC",
- "move": 5,
- "attack": 7,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "20xC",
- "move": 5,
- "attack": 7,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "22xC",
- "move": 5,
- "attack": 8,
- "range": 0,
- "special1": [
- "Throne moves",
- "Summon Demon (Special 1)",
- "%move% +2",
- "%attack% -1"
- ],
- "special2": [
- "Throne moves",
- "Summon Demon (Special 2)",
- "%move% +2",
- "%attack% -1"
- ],
- "immunities": [
- "%wound%",
- "%poison%",
- "%disarm%",
- "%immobilize%",
- "%muddle%",
- "%stun%"
- ],
- "notes": ""
- }
- ]
- },
- "The Sightless Eye": {
- "level": [
- {
- "level": 0,
- "health": "7xC",
- "move": 0,
- "attack": 5,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "8xC",
- "move": 0,
- "attack": 6,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "10xC",
- "move": 0,
- "attack": 6,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "11xC",
- "move": 0,
- "attack": 7,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "14xC",
- "move": 0,
- "attack": 7,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "15xC",
- "move": 0,
- "attack": 8,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "18xC",
- "move": 0,
- "attack": 8,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "20xC",
- "move": 0,
- "attack": 9,
- "range": 3,
- "special1": [
- "Summon Deep Terror",
- "%attack% -3 %boss-aoe-sightless-eye-sp1%"
- ],
- "special2": [
- "Summon Deep Terror",
- "%attack% -2 %boss-aoe-sightless-eye-sp2%"
- ],
- "immunities": [
- "%stun%",
- "%disarm%",
- "%curse%",
- "%muddle%"
- ],
- "notes": ""
- }
- ]
- },
- "Winged Horror": {
- "level": [
- {
- "level": 0,
- "health": "6xC",
- "move": 3,
- "attack": 3,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 1,
- "health": "7xC",
- "move": 4,
- "attack": 3,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 2,
- "health": "8xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 3,
- "health": "10xC",
- "move": 4,
- "attack": 4,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 4,
- "health": "12xC",
- "move": 5,
- "attack": 4,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 5,
- "health": "14xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 6,
- "health": "17xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- },
- {
- "level": 7,
- "health": "20xC",
- "move": 5,
- "attack": 5,
- "range": 0,
- "special1": [
- "%attack% -1, Target all adjacent enemies",
- "%attack% +0, %range% 3",
- "Hatch eggs"
- ],
- "special2": [
- "Summon C eggs",
- "%move% -1",
- "%attack% +0"
- ],
- "immunities": [
- "%disarm%",
- "%poison%",
- "%muddle%",
- "%stun%",
- "%curse%"
- ],
- "notes": ""
- }
- ]
- }
- }
-};
+export const SPECIAL_VALUES =
+{
+ "X": "X = Hexes moved",
+ "C": "C = Number of Characters",
+ "V": "V = Number of Scouts present"
+}
+
+export const MONSTER_STATS = {
+ "monsters": {
+ "Ancient Artillery": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 0,
+ "attack": 2,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 0,
+ "attack": 3,
+ "range": 5,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 0,
+ "attack": 2,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 0,
+ "attack": 3,
+ "range": 5,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 0,
+ "attack": 2,
+ "range": 5,
+ "attributes": []
+ },
+ "elite": {
+ "health": 11,
+ "move": 0,
+ "attack": 3,
+ "range": 6,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 8,
+ "move": 0,
+ "attack": 3,
+ "range": 5,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 0,
+ "attack": 4,
+ "range": 6,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 9,
+ "move": 0,
+ "attack": 4,
+ "range": 5,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 0,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%target% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 0,
+ "attack": 4,
+ "range": 6,
+ "attributes": []
+ },
+ "elite": {
+ "health": 15,
+ "move": 0,
+ "attack": 4,
+ "range": 7,
+ "attributes": [
+ "%target% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 14,
+ "move": 0,
+ "attack": 4,
+ "range": 6,
+ "attributes": []
+ },
+ "elite": {
+ "health": 16,
+ "move": 0,
+ "attack": 5,
+ "range": 7,
+ "attributes": [
+ "%target% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 16,
+ "move": 0,
+ "attack": 4,
+ "range": 7,
+ "attributes": []
+ },
+ "elite": {
+ "health": 20,
+ "move": 0,
+ "attack": 5,
+ "range": 7,
+ "attributes": [
+ "%target% 2"
+ ]
+ }
+ }
+ ]
+ },
+ "Bandit Archer": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 2,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 6,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 2,
+ "attack": 3,
+ "range": 5,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 2,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 3,
+ "attack": 3,
+ "range": 5,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 8,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 5,
+ "attributes": []
+ },
+ "elite": {
+ "health": 12,
+ "move": 4,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 4,
+ "attack": 5,
+ "range": 6,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 13,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": []
+ },
+ "elite": {
+ "health": 17,
+ "move": 4,
+ "attack": 5,
+ "range": 6,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ }
+ ]
+ },
+ "Bandit Guard": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 10,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 11,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%muddle%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 12,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%muddle%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 14,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 14,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%muddle%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 16,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%muddle%",
+ "%shield% 3"
+ ]
+ }
+ }
+ ]
+ },
+ "Black Imp": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 3,
+ "move": 1,
+ "attack": 1,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 4,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 4,
+ "move": 1,
+ "attack": 1,
+ "range": 3,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 5,
+ "move": 1,
+ "attack": 1,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 1,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 5,
+ "move": 1,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 1,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "Attackers gain Disadvantage",
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 7,
+ "move": 1,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 1,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "Attackers gain Disadvantage",
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 9,
+ "move": 1,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 1,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "Attackers gain Disadvantage",
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 10,
+ "move": 1,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 1,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "Attackers gain Disadvantage",
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 12,
+ "move": 1,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 17,
+ "move": 1,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "Attackers gain Disadvantage",
+ "%poison%"
+ ]
+ }
+ }
+ ]
+ },
+ "Cave Bear": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 7,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 11,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 11,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 17,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 13,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 20,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 16,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 21,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 17,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 24,
+ "move": 5,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 19,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 28,
+ "move": 5,
+ "attack": 7,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 22,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 33,
+ "move": 5,
+ "attack": 7,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ }
+ ]
+ },
+ "City Archer": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 6,
+ "move": 1,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 1,
+ "attack": 2,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 6,
+ "move": 1,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "%pierce% 1",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 6,
+ "move": 1,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 1,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%pierce% 2",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 6,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 2,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%pierce% 2",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 8,
+ "move": 2,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 10,
+ "move": 2,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%pierce% 2",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 9,
+ "move": 2,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 2,
+ "attack": 5,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 3,
+ "attack": 6,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 3,
+ "attack": 6,
+ "range": 7,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 3"
+ ]
+ }
+ }
+ ]
+ },
+ "City Guard": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 6,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 8,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 13,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3",
+ "%shield% 3"
+ ]
+ }
+ }
+ ]
+ },
+ "Cultist": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 2,
+ "attack": 1,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 1,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 1,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 12,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 1,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 15,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 14,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ },
+ "elite": {
+ "health": 22,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 15,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ },
+ "elite": {
+ "health": 25,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%curse%"
+ ]
+ }
+ }
+ ]
+ },
+ "Deep Terror": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 3,
+ "move": 0,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 5,
+ "move": 0,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 4,
+ "move": 0,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 0,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 4,
+ "move": 0,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 0,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 5,
+ "move": 0,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 0,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 6,
+ "move": 0,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 0,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 7,
+ "move": 0,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 0,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 8,
+ "move": 0,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 0,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 9,
+ "move": 0,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 0,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Earth Demon": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 7,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 9,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 12,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 18,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 13,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 20,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 15,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 21,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 17,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ },
+ "elite": {
+ "health": 25,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 20,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ },
+ "elite": {
+ "health": 27,
+ "move": 3,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 22,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ },
+ "elite": {
+ "health": 32,
+ "move": 3,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%immobilize%"
+ ]
+ }
+ }
+ ]
+ },
+ "Flame Demon": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 2,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 2,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 2: %range% 2",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 4,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 3: %range% 2",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 2: %range% 2",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 3,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 3: %range% 3",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 3,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 3: %range% 2",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 4,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 4: %range% 3",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 4,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 3: %range% 2",
+ "%shield% 4"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 4,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 4: %range% 3",
+ "%shield% 5"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 4,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 4: %range% 2",
+ "%shield% 4"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 5: %range% 3",
+ "%shield% 5"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 5,
+ "move": 4,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 4: %range% 3",
+ "%shield% 4"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 4,
+ "attack": 5,
+ "range": 6,
+ "attributes": [
+ "%flying%",
+ "%retaliate% 5: %range% 4",
+ "%shield% 5"
+ ]
+ }
+ }
+ ]
+ },
+ "Frost Demon": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 8,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 20,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 22,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 14,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 25,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Forest Imp": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 1,
+ "move": 3,
+ "attack": 1,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 4,
+ "move": 3,
+ "attack": 1,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 2,
+ "move": 3,
+ "attack": 1,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 2,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 3,
+ "move": 4,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 3,
+ "move": 4,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 4,
+ "move": 4,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 4,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 6,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%curse%",
+ "%shield% 2"
+ ]
+ }
+ }
+ ]
+ },
+ "Giant Viper": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 2,
+ "move": 2,
+ "attack": 1,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 3,
+ "move": 2,
+ "attack": 1,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 4,
+ "move": 3,
+ "attack": 1,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 4,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 7,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 8,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 10,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 17,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ }
+ ]
+ },
+ "Harrower Infester": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 6,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 12,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 8,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 10,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 17,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 19,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 15,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ },
+ "elite": {
+ "health": 22,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 17,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ },
+ "elite": {
+ "health": 26,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Hound": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 6,
+ "move": 5,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 4,
+ "move": 4,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 5,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 6,
+ "move": 4,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 5,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 8,
+ "move": 4,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 8,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 9,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 11,
+ "move": 5,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 6,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 15,
+ "move": 5,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 6,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Inox Archer": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 2,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 2,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 8,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 8,
+ "move": 2,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 11,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 2,
+ "attack": 4,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 17,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 19,
+ "move": 3,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 15,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 23,
+ "move": 3,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ }
+ ]
+ },
+ "Inox Guard": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 8,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 12,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 15,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 17,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 3"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 13,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 19,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 1"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 19,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 2"
+ ]
+ },
+ "elite": {
+ "health": 23,
+ "move": 3,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%retaliate% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Inox Shaman": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 6,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ },
+ "elite": {
+ "health": 11,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 9,
+ "move": 2,
+ "attack": 2,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 10,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 13,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 20,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 15,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 24,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": []
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": []
+ },
+ "elite": {
+ "health": 27,
+ "move": 4,
+ "attack": 5,
+ "range": 4,
+ "attributes": []
+ }
+ }
+ ]
+ },
+ "Living Bones": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 1,
+ "range": 0,
+ "attributes": [
+ "%target% 2"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 4,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 2"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 1,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 4,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 7,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 10,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 7,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 10,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 6,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 13,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 6,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 3",
+ "%shield% 2"
+ ]
+ }
+ }
+ ]
+ },
+ "Living Corpse": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 7,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 1,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 9,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 1,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 10,
+ "move": 1,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 11,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 15,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 13,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 17,
+ "move": 2,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 14,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 2,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 15,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 25,
+ "move": 2,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ }
+ }
+ ]
+ },
+ "Living Spirit": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 2,
+ "move": 2,
+ "attack": 2,
+ "range": 2,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 2,
+ "move": 2,
+ "attack": 2,
+ "range": 2,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 2,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 4,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 4,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 4,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 4,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 4,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%shield% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Lurker": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 2"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 1"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 1",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 1"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 2",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 2"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 2",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 10,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 2",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 12,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 16,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 4",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 14,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%target% 2",
+ "%pierce% 4",
+ "%shield% 2"
+ ]
+ }
+ }
+ ]
+ },
+ "Ooze": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 4,
+ "move": 1,
+ "attack": 2,
+ "range": 2,
+ "attributes": []
+ },
+ "elite": {
+ "health": 8,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 1,
+ "attack": 2,
+ "range": 2,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 1,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 1,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 8,
+ "move": 1,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%poison%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 2,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%poison%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 10,
+ "move": 2,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%poison%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%poison%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 12,
+ "move": 2,
+ "attack": 4,
+ "range": 3,
+ "attributes": [
+ "%poison%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%poison%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 14,
+ "move": 2,
+ "attack": 4,
+ "range": 3,
+ "attributes": [
+ "%poison%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 3,
+ "attack": 5,
+ "range": 4,
+ "attributes": [
+ "%poison%",
+ "%shield% 2"
+ ]
+ }
+ }
+ ]
+ },
+ "Night Demon": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 7,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 8,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 17,
+ "move": 5,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 14,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 5,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 15,
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 5,
+ "attack": 8,
+ "range": 0,
+ "attributes": [
+ "Attackers gain Disadvantage"
+ ]
+ }
+ }
+ ]
+ },
+ "Rending Drake": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 7,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 7,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 10,
+ "move": 5,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 9,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 6,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 10,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 6,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 11,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 6,
+ "attack": 7,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 14,
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 6,
+ "attack": 7,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ }
+ ]
+ },
+ "Savvas Icestorm": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%pierce% 3"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 2,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%pierce% 3"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 10,
+ "move": 2,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%pierce% 3"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 2,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%pierce% 3"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 3,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 3,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 14,
+ "move": 3,
+ "attack": 3,
+ "range": 5,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 19,
+ "move": 4,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 4,
+ "attack": 5,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 5,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 23,
+ "move": 4,
+ "attack": 6,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 17,
+ "move": 4,
+ "attack": 4,
+ "range": 6,
+ "attributes": [
+ "%pierce% 3",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 24,
+ "move": 4,
+ "attack": 6,
+ "range": 6,
+ "attributes": [
+ "%pierce% 4",
+ "%shield% 3"
+ ]
+ }
+ }
+ ]
+ },
+ "Savvas Lavaflow": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 8,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 13,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 9,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 14,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 16,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%"
+ ]
+ },
+ "elite": {
+ "health": 24,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 18,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 27,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 20,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 30,
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 24,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ },
+ "elite": {
+ "health": 35,
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%poison%",
+ "%wound%"
+ ]
+ }
+ }
+ ]
+ },
+ "Spitting Drake": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%"]
+ },
+ "elite": {
+ "health": 8,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%"]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%"]
+ },
+ "elite": {
+ "health": 9,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 8,
+ "move": 3,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ },
+ "elite": {
+ "health": 10,
+ "move": 3,
+ "attack": 5,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 8,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 3,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 9,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 4,
+ "attack": 5,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 12,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ },
+ "elite": {
+ "health": 16,
+ "move": 4,
+ "attack": 6,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 13,
+ "move": 4,
+ "attack": 5,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ },
+ "elite": {
+ "health": 19,
+ "move": 4,
+ "attack": 6,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 16,
+ "move": 4,
+ "attack": 5,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 4,
+ "attack": 7,
+ "range": 5,
+ "attributes": [
+ "%flying%",
+ "%muddle%"
+ ]
+ }
+ }
+ ]
+ },
+ "Stone Golem": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 10,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 10,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 10,
+ "move": 1,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 11,
+ "move": 1,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 14,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 11,
+ "move": 1,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 12,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 17,
+ "move": 2,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 13,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 19,
+ "move": 3,
+ "attack": 6,
+ "range": 0,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 16,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 20,
+ "move": 3,
+ "attack": 7,
+ "range": 0,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 16,
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 21,
+ "move": 3,
+ "attack": 7,
+ "range": 0,
+ "attributes": [
+ "%shield% 4"
+ ]
+ }
+ }
+ ]
+ },
+ "Sun Demon": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 5,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 9,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 7,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 9,
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 10,
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 15,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 16,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 11,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 16,
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 12,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 18,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 15,
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 22,
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "attributes": [
+ "%flying%",
+ "Advantage",
+ "%shield% 2"
+ ]
+ }
+ }
+ ]
+ },
+ "Vermling Scout": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 2,
+ "move": 3,
+ "attack": 1,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 4,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 1,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 5,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 5,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 7,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 6,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 8,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 8,
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 9,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 12,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 11,
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "attributes": []
+ },
+ "elite": {
+ "health": 15,
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "attributes": []
+ }
+ }
+ ]
+ },
+ "Vermling Shaman": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 2,
+ "move": 2,
+ "attack": 1,
+ "range": 3,
+ "attributes": [
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 2,
+ "move": 2,
+ "attack": 1,
+ "range": 3,
+ "attributes": [
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 3,
+ "move": 2,
+ "attack": 1,
+ "range": 4,
+ "attributes": [
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 4,
+ "move": 3,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 3,
+ "move": 2,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 4,
+ "move": 3,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 4"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 5,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 6,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 5"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 7,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 3,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%muddle%",
+ "%shield% 5"
+ ]
+ }
+ }
+ ]
+ },
+ "Wind Demon": {
+ "level": [
+ {
+ "level": 0,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 1"
+ ]
+ }
+ },
+ {
+ "level": 1,
+ "normal": {
+ "health": 3,
+ "move": 3,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 5,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 2,
+ "normal": {
+ "health": 4,
+ "move": 4,
+ "attack": 2,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 7,
+ "move": 5,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 3,
+ "normal": {
+ "health": 5,
+ "move": 4,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 5,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 4,
+ "normal": {
+ "health": 7,
+ "move": 4,
+ "attack": 3,
+ "range": 3,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 8,
+ "move": 5,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%disarm%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 5,
+ "normal": {
+ "health": 9,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 2"
+ ]
+ },
+ "elite": {
+ "health": 11,
+ "move": 5,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%disarm%",
+ "%shield% 2"
+ ]
+ }
+ },
+ {
+ "level": 6,
+ "normal": {
+ "health": 10,
+ "move": 4,
+ "attack": 3,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 12,
+ "move": 5,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%disarm%",
+ "%shield% 3"
+ ]
+ }
+ },
+ {
+ "level": 7,
+ "normal": {
+ "health": 11,
+ "move": 4,
+ "attack": 4,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%shield% 3"
+ ]
+ },
+ "elite": {
+ "health": 13,
+ "move": 5,
+ "attack": 5,
+ "range": 4,
+ "attributes": [
+ "%flying%",
+ "%disarm%",
+ "%shield% 3"
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "bosses": {
+ "Bandit Commander": {
+ "level": [
+ {
+ "level": 0,
+ "health": "8xC",
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "10xC",
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "12xC",
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "13xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "15xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "16xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "19xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "23xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Move to next door and reveal room"
+ ],
+ "special2": [
+ "Summon Living Bones"
+ ],
+ "immunities": [
+ "%stun%",
+ "%immobilize%",
+ "%curse%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "The Betrayer": {
+ "level": [
+ {
+ "level": 0,
+ "health": "10xC",
+ "move": 3,
+ "attack": 4,
+ "range": 3,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "12xC",
+ "move": 3,
+ "attack": 5,
+ "range": 3,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "14xC",
+ "move": 3,
+ "attack": 6,
+ "range": 4,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "16xC",
+ "move": 4,
+ "attack": 7,
+ "range": 4,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "18xC",
+ "move": 4,
+ "attack": 8,
+ "range": 4,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "20xC",
+ "move": 5,
+ "attack": 8,
+ "range": 5,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "23xC",
+ "move": 5,
+ "attack": 9,
+ "range": 5,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "27xC",
+ "move": 5,
+ "attack": 9,
+ "range": 5,
+ "special1": [
+ "Summon Giant Viper and Fear"
+ ],
+ "special2": [
+ "Mind Control"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%stun%",
+ "%disarm%",
+ "%curse%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "Captain of the Guard": {
+ "level": [
+ {
+ "level": 0,
+ "health": "7xC",
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "9xC",
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "11xC",
+ "move": 2,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "14xC",
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "16xC",
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "20xC",
+ "move": 3,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "21xC",
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "25xC",
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%heal% 2, Affect self and all allies"
+ ],
+ "special2": [
+ "All allies add +1 Attack to all attacks this round",
+ "%attack% +1"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "The Colorless": {
+ "level": [
+ {
+ "level": 0,
+ "health": "9xC",
+ "move": 3,
+ "attack": 2,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 4, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "10xC",
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 4, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "11xC",
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 5, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "12xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 5, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "14xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 6, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "15xC",
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 6, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "17xC",
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 7, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "19xC",
+ "move": 5,
+ "attack": 7,
+ "range": 0,
+ "special1": [
+ "%dark%%use_element%: Summon Night Demon",
+ "%invisible%, Self"
+ ],
+ "special2": [
+ "%light%%use_element%: Summon Sun Demon",
+ "%heal% 7, Self",
+ "%shield% 1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "Dark Rider": {
+ "level": [
+ {
+ "level": 0,
+ "health": "9xC",
+ "move": 2,
+ "attack": "3+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 1,
+ "health": "10xC",
+ "move": 3,
+ "attack": "3+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 2,
+ "health": "12xC",
+ "move": 3,
+ "attack": "3+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 3,
+ "health": "13xC",
+ "move": 3,
+ "attack": "4+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 4,
+ "health": "15xC",
+ "move": 3,
+ "attack": "4+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 5,
+ "health": "16xC",
+ "move": 3,
+ "attack": "5+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 6,
+ "health": "16xC",
+ "move": 4,
+ "attack": "5+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ },
+ {
+ "level": 7,
+ "health": "18xC",
+ "move": 4,
+ "attack": "6+X",
+ "range": 0,
+ "special1": [
+ "%move% +2",
+ "%attack% +0"
+ ],
+ "special2": [
+ "%move% +0",
+ "Summon Imp",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%immobilize%",
+ "%poison%",
+ "%stun%",
+ "%disarm%"
+ ],
+ "notes": "X = Hexes moved"
+ }
+ ]
+ },
+ "Elder Drake": {
+ "level": [
+ {
+ "level": 0,
+ "health": "11xC",
+ "move": 0,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "12xC",
+ "move": 0,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "15xC",
+ "move": 0,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "16xC",
+ "move": 0,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "20xC",
+ "move": 0,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "22xC",
+ "move": 0,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "27xC",
+ "move": 0,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "29xC",
+ "move": 0,
+ "attack": 7,
+ "range": 0,
+ "special1": [
+ "%attack% +0 %boss-aoe-elder-drake-sp1%"
+ ],
+ "special2": [
+ "Summon 2 Zephyrs and %move%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%stun%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "The Gloom": {
+ "level": [
+ {
+ "level": 0,
+ "health": "20xC",
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "25xC",
+ "move": 2,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "29xC",
+ "move": 2,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "35xC",
+ "move": 2,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "39xC",
+ "move": 3,
+ "attack": 7,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "46xC",
+ "move": 3,
+ "attack": 7,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "50xC",
+ "move": 3,
+ "attack": 8,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "56xC",
+ "move": 3,
+ "attack": 9,
+ "range": 0,
+ "special1": [
+ "%move% +9",
+ "%attack% +9"
+ ],
+ "special2": [
+ "Teleport",
+ "%attack% +1",
+ "%range% 5",
+ "%poison%",
+ "%wound%",
+ "%stun%"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "Inox Bodyguard": {
+ "level": [
+ {
+ "level": 0,
+ "health": "6xC",
+ "move": 2,
+ "attack": "C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 3"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 1,
+ "health": "7xC",
+ "move": 2,
+ "attack": "1+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 3"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 2,
+ "health": "9xC",
+ "move": 2,
+ "attack": "1+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 3"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 3,
+ "health": "10xC",
+ "move": 3,
+ "attack": "2+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 4"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 4,
+ "health": "11xC",
+ "move": 3,
+ "attack": "2+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 4"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 5,
+ "health": "13xC",
+ "move": 3,
+ "attack": "3+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 5"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 6,
+ "health": "15xC",
+ "move": 4,
+ "attack": "3+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 5"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ },
+ {
+ "level": 7,
+ "health": "17xC",
+ "move": 4,
+ "attack": "4+C",
+ "range": 0,
+ "special1": [
+ "%move% -1",
+ "%attack% -1 %boss-aoe-inox-bodyguard-sp1%"
+ ],
+ "special2": [
+ "%move% +0",
+ "%attack% +0",
+ "%retaliate% 5"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": "C = Number of Characters"
+ }
+ ]
+ },
+ "Jekserah": {
+ "level": [
+ {
+ "level": 0,
+ "health": "6xC",
+ "move": 2,
+ "attack": 2,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "7xC",
+ "move": 2,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "9xC",
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "12xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "13xC",
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "15xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "18xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "22xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Summon Living Bones",
+ "%attack% -1, Target all adjacent enemies"
+ ],
+ "special2": [
+ "Summon Living Corpse",
+ "%move% -1",
+ "%attack% +2"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "Merciless Overseer": {
+ "level": [
+ {
+ "level": 0,
+ "health": "6xC",
+ "move": 2,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 1,
+ "health": "8xC",
+ "move": 2,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 2,
+ "health": "9xC",
+ "move": 3,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 3,
+ "health": "11xC",
+ "move": 3,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 4,
+ "health": "12xC",
+ "move": 4,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 5,
+ "health": "14xC",
+ "move": 4,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 6,
+ "health": "16xC",
+ "move": 4,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ },
+ {
+ "level": 7,
+ "health": "19xC",
+ "move": 4,
+ "attack": "V",
+ "range": 0,
+ "special1": [
+ "All Scouts act again"
+ ],
+ "special2": [
+ "Summon Vermling Scout"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%wound%",
+ "%curse%",
+ "%stun%"
+ ],
+ "notes": "V = Number of Scouts present"
+ }
+ ]
+ },
+ "Prime Demon": {
+ "level": [
+ {
+ "level": 0,
+ "health": "8xC",
+ "move": 3,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "9xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "10xC",
+ "move": 4,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "12xC",
+ "move": 4,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "14xC",
+ "move": 5,
+ "attack": 6,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "16xC",
+ "move": 5,
+ "attack": 7,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "20xC",
+ "move": 5,
+ "attack": 7,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "22xC",
+ "move": 5,
+ "attack": 8,
+ "range": 0,
+ "special1": [
+ "Throne moves",
+ "Summon Demon (Special 1)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "special2": [
+ "Throne moves",
+ "Summon Demon (Special 2)",
+ "%move% +2",
+ "%attack% -1"
+ ],
+ "immunities": [
+ "%wound%",
+ "%poison%",
+ "%disarm%",
+ "%immobilize%",
+ "%muddle%",
+ "%stun%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "The Sightless Eye": {
+ "level": [
+ {
+ "level": 0,
+ "health": "7xC",
+ "move": 0,
+ "attack": 5,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "8xC",
+ "move": 0,
+ "attack": 6,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "10xC",
+ "move": 0,
+ "attack": 6,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "11xC",
+ "move": 0,
+ "attack": 7,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "14xC",
+ "move": 0,
+ "attack": 7,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "15xC",
+ "move": 0,
+ "attack": 8,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "18xC",
+ "move": 0,
+ "attack": 8,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "20xC",
+ "move": 0,
+ "attack": 9,
+ "range": 3,
+ "special1": [
+ "Summon Deep Terror",
+ "%attack% -3 %boss-aoe-sightless-eye-sp1%"
+ ],
+ "special2": [
+ "Summon Deep Terror",
+ "%attack% -2 %boss-aoe-sightless-eye-sp2%"
+ ],
+ "immunities": [
+ "%stun%",
+ "%disarm%",
+ "%curse%",
+ "%muddle%"
+ ],
+ "notes": ""
+ }
+ ]
+ },
+ "Winged Horror": {
+ "level": [
+ {
+ "level": 0,
+ "health": "6xC",
+ "move": 3,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 1,
+ "health": "7xC",
+ "move": 4,
+ "attack": 3,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 2,
+ "health": "8xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 3,
+ "health": "10xC",
+ "move": 4,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 4,
+ "health": "12xC",
+ "move": 5,
+ "attack": 4,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 5,
+ "health": "14xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 6,
+ "health": "17xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ },
+ {
+ "level": 7,
+ "health": "20xC",
+ "move": 5,
+ "attack": 5,
+ "range": 0,
+ "special1": [
+ "%attack% -1, Target all adjacent enemies",
+ "%attack% +0, %range% 3",
+ "Hatch eggs"
+ ],
+ "special2": [
+ "Summon C eggs",
+ "%move% -1",
+ "%attack% +0"
+ ],
+ "immunities": [
+ "%disarm%",
+ "%poison%",
+ "%muddle%",
+ "%stun%",
+ "%curse%"
+ ],
+ "notes": ""
+ }
+ ]
+ }
+ }
+};
diff --git a/scenarios.js b/src/scenarios.js
similarity index 96%
rename from scenarios.js
rename to src/scenarios.js
index 14ba880a..d86a9f66 100644
--- a/scenarios.js
+++ b/src/scenarios.js
@@ -1,5 +1,5 @@
//special_rules should be treated with some kind of macro that recognises them and applies them when loading
-SPECIAL_RULES =
+export const SPECIAL_RULES =
{
living_corpse_two_levels_extra:
{ "description": "All living corpses are two levels higher than the scenario level, up to a max of 7",
@@ -9,7 +9,7 @@ SPECIAL_RULES =
};
-SCENARIO_DEFINITIONS =
+export const SCENARIO_DEFINITIONS =
[ { name: "#1 Black Barrow"
, decks:
[ {"name": "Bandit Guard", "deck_name": "Guard"}
@@ -295,7 +295,7 @@ SCENARIO_DEFINITIONS =
, {"name": "Earth Demon"}
, {"name": "Wind Demon"}
, {"name": "City Archer"}
- , {"name": "City Guard"}
+ , {"name": "City Guard"}
, {"name": "Boss: Captain of the Guard"}
]
},
diff --git a/src/ui.js b/src/ui.js
new file mode 100644
index 00000000..07d26636
--- /dev/null
+++ b/src/ui.js
@@ -0,0 +1,59 @@
+function activate_tab(tabs, pages, activetab)
+{
+ for (let key in tabs)
+ {
+ tabs[key].className = (key === activetab) ? "" : "inactive";
+ }
+ for (let key in pages)
+ {
+ pages[key].className = (key === activetab) ? "tabbody" : "inactive tabbody";
+ }
+}
+
+export function show_settingspane(pane, cancelarea, show)
+{
+ pane.className = show ? "pane" : "pane inactive";
+ cancelarea.style.display = show ? "initial" : "none";
+}
+
+export const widgets = {}
+
+export function init_ui()
+{
+ const tabs =
+ {
+ scenarios: document.getElementById("scenariotab"),
+ decks: document.getElementById("deckstab")
+ };
+ const pages =
+ {
+ scenarios: document.getElementById("scenariospage"),
+ decks: document.getElementById("deckspage")
+ };
+
+ widgets.settingspane = document.getElementById("settingspane");
+ widgets.settingsbtn = document.getElementById("settingsbtn");
+ widgets.cancelarea = document.getElementById("cancelarea");
+
+ tabs.scenarios.onclick = function()
+ {
+ activate_tab(tabs, pages, "scenarios");
+ }
+
+ tabs.decks.onclick = function()
+ {
+ activate_tab(tabs, pages, "decks");
+ }
+
+ widgets.settingsbtn.onclick = function()
+ {
+ show_settingspane(widgets.settingspane, widgets.cancelarea, true);
+ }
+
+ widgets.cancelarea.onclick = function()
+ {
+ show_settingspane(widgets.settingspane, widgets.cancelarea, false);
+ }
+
+ activate_tab(tabs, pages, "scenarios");
+}
diff --git a/src/util.js b/src/util.js
new file mode 100644
index 00000000..e4ab8ea8
--- /dev/null
+++ b/src/util.js
@@ -0,0 +1,114 @@
+
+export function shuffle_list(l)
+{
+ for (let i = 0; i < l.length-1; i++)
+ {
+ // Based on https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Implementation_errors
+ const switch_index = i + Math.floor(Math.random() * (l.length - i));
+ const tmp = l[switch_index];
+ l[switch_index] = l[i];
+ l[i] = tmp;
+ }
+}
+
+export function toggle_class(element, class_name, enable_class)
+{
+ if (enable_class)
+ {
+ element.classList.add(class_name);
+ }
+ else
+ {
+ element.classList.remove(class_name);
+ }
+}
+
+export function remove_child(myNode)
+{
+ while (myNode.firstChild)
+ {
+ myNode.removeChild(myNode.firstChild);
+ }
+}
+
+export function create_input(type, name, value, text)
+{
+ const input = document.createElement("input");
+ input.type = type;
+ input.name = name;
+ input.value = value;
+
+ const textnode = document.createTextNode(text);
+
+ const label = document.createElement("label");
+ label.appendChild(input);
+ label.appendChild(textnode);
+
+ return {'root': label, 'input': input};
+}
+
+export function create_button(type, id, value)
+{
+ const button = document.createElement("input");
+ button.type = type;
+ button.id = id;
+ button.value = value;
+
+ return button;
+}
+
+export function dict_values(dict)
+{
+ const values = [];
+ for (let key in dict) {
+ values.push(dict[key]);
+ }
+
+ return values;
+}
+
+export function concat_arrays(arrays)
+{
+ return Array.prototype.concat.apply([], arrays);
+}
+
+export function is_checked(input)
+{
+ return (('checked' in input) ? input.checked : false);
+}
+
+export function input_value(input)
+{
+ return (('value' in input) ? input.value : '');
+}
+
+export function remove_empty_strings(array)
+{
+ return array.filter(Boolean);
+}
+
+export function write_to_storage(name, value) {
+ try {
+ localStorage.setItem(name, value);
+ } catch (e) {
+ console.error('Local storage is required');
+ }
+ // console.info("Local storage write:", name, value);
+}
+
+export function get_from_storage(name) {
+ try {
+ return localStorage.getItem(name);
+ } catch (e) {
+ console.error('Local storage is required');
+ }
+}
+
+export function find_in_discard(discard, id) {
+ for (let i=0; i < discard.length; i++) {
+ if (discard[i].id === id) {
+ return discard[i];
+ }
+ }
+ return null;
+}
diff --git a/ui.js b/ui.js
deleted file mode 100644
index d90a58b4..00000000
--- a/ui.js
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-function activate_tab(tabs, pages, activetab)
-{
- for (key in tabs)
- {
- tabs[key].className = (key == activetab) ? "" : "inactive";
- }
- for (key in pages)
- {
- pages[key].className = (key == activetab) ? "tabbody" : "inactive tabbody";
- }
-}
-
-function show_settingspane(pane, cancelarea, show)
-{
- pane.className = show ? "pane" : "pane inactive";
- cancelarea.style.display = show ? "initial" : "none";
-}
-
-function init_ui()
-{
- var tabs =
- {
- scenarios: document.getElementById("scenariotab"),
- decks: document.getElementById("deckstab")
- };
- var pages =
- {
- scenarios: document.getElementById("scenariospage"),
- decks: document.getElementById("deckspage")
- };
-
- settingspane = document.getElementById("settingspane");
- settingsbtn = document.getElementById("settingsbtn");
- cancelarea = document.getElementById("cancelarea");
-
- scenariotab.onclick = function(e)
- {
- activate_tab(tabs, pages, "scenarios");
- }
-
- deckstab.onclick = function(e)
- {
- activate_tab(tabs, pages, "decks");
- }
-
- settingsbtn.onclick = function(e)
- {
- show_settingspane(settingspane, cancelarea, true);
- }
-
- cancelarea.onclick = function(e)
- {
- show_settingspane(settingspane, cancelarea, false);
- }
-
- activate_tab(tabs, pages, "scenarios");
-
-}
-
diff --git a/util.js b/util.js
deleted file mode 100644
index a92fdbb0..00000000
--- a/util.js
+++ /dev/null
@@ -1,106 +0,0 @@
-
-function shuffle_list(l)
-{
- for (var i = 0; i < l.length-1; i++)
- {
- // Based on https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Implementation_errors
- var switch_index = i + Math.floor(Math.random() * (l.length - i));
- var tmp = l[switch_index];
- l[switch_index] = l[i];
- l[i] = tmp;
- }
-}
-
-function toggle_class(element, class_name, enable_class)
-{
- if (enable_class)
- {
- element.classList.add(class_name);
- }
- else
- {
- element.classList.remove(class_name);
- }
-}
-
-function remove_child(myNode)
-{
- while (myNode.firstChild)
- {
- myNode.removeChild(myNode.firstChild);
- }
-}
-
-function create_input(type, name, value, text)
-{
- var input = document.createElement("input");
- input.type = type;
- input.name = name;
- input.value = value;
-
- var textnode = document.createTextNode(text);
-
- var label = document.createElement("label");
- label.appendChild(input);
- label.appendChild(textnode);
-
- return {'root': label, 'input': input};
-}
-
-function create_button(type, id, value)
-{
- var button = document.createElement("input");
- button.type = type;
- button.id = id;
- button.value = value;
-
- return button;
-}
-
-function dict_values(dict)
-{
- var values = [];
- for (key in dict) {
- values.push(dict[key]);
- }
-
- return values;
-}
-
-function concat_arrays(arrays)
-{
- return Array.prototype.concat.apply([], arrays);
-}
-
-function is_checked(input)
-{
- return (('checked' in input) ? input.checked : false);
-}
-
-function input_value(input)
-{
- return (('value' in input) ? input.value : '');
-}
-
-function remove_empty_strings(array)
-{
- return array.filter(Boolean);
-}
-
-function write_to_storage(name, value) {
- try { localStorage.setItem(name, value); } catch (e) { console.error('Local storage is required'); return; }
- // console.info("Local storage write:", name, value);
-}
-
-function get_from_storage(name) {
- try { return localStorage.getItem(name); } catch (e) { console.error('Local storage is required'); return; }
-}
-
-function find_in_discard(discard, id) {
- for (var i=0; i < discard.length; i++) {
- if (discard[i].id === id) {
- return discard[i];
- }
- }
- return null;
-}
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 00000000..a072ab07
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,15 @@
+const path = require('path');
+
+module.exports = {
+ entry: './src/index.js',
+
+ output: {
+ filename: 'main.js',
+ path: path.resolve(__dirname, 'dist'),
+ },
+
+ devServer: {
+ disableHostCheck: true,
+ contentBase: path.resolve(__dirname, 'dist')
+ }
+};